diff options
Diffstat (limited to 'test/run')
-rwxr-xr-x | test/run | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/test/run b/test/run new file mode 100755 index 000000000..bc31d2f71 --- /dev/null +++ b/test/run @@ -0,0 +1,130 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +eval $(gomake --no-print-directory -f ../src/Make.inc go-env) + +export E= + +case X"$GOARCH" in +Xamd64) + export A=6 + ;; +X386) + export A=8 + ;; +Xarm) + export A=5 + export E="$GORUN" + ;; +*) + echo 1>&2 run: unsupported '$GOARCH' + exit 1 +esac + +export G=${A}g +export L=${A}l +export GOTRACEBACK=0 +export LANG=C +unset GREP_OPTIONS # in case user has a non-standard set + +failed=0 + +PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$GOROOT/bin}:`pwd` + +RUNFILE="/tmp/gorun-$$-$USER" +TMP1FILE="/tmp/gotest1-$$-$USER" +TMP2FILE="/tmp/gotest2-$$-$USER" + +# don't run the machine out of memory: limit individual processes to 4GB. +# on thresher, 3GB suffices to run the tests; with 2GB, peano fails. +ulimit -v 4000000 + +# no core files please +ulimit -c 0 + +true >pass.out >times.out + +exclude=false # exclude nothing +golden=golden.out + +filterout() { + grep '^'"$2"'$' $1 >/dev/null +} + +for dir in . ken chan interface nilptr syntax fixedbugs bugs +do + echo + echo '==' $dir'/' + for i in $(ls $dir/*.go 2>/dev/null) + do ( + if $exclude $i; then + exit 0 # continues for loop + fi + export F=$(basename $i .go) + export D=$dir + sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|g' >"$RUNFILE" + if ! { time -p bash -c "bash '$RUNFILE' >'$TMP1FILE' 2>&1" ; } 2>"$TMP2FILE" + then + echo + echo "===========" $i + cat "$TMP1FILE" + echo >&2 fail: $i + echo "# $i # fail" >>pass.out + elif test -s "$TMP1FILE" + then + echo + echo "===========" $i + cat "$TMP1FILE" + if grep -q '^BUG' "$TMP1FILE" + then + if [ $dir != bugs ] + then + echo >&2 bug: $i + fi + echo "# $i # fail, BUG" >>pass.out + else + echo $i >>pass.out + fi + elif [ $dir = "bugs" ] + then + echo $i succeeded with no output. + else + echo $i >>pass.out + fi + echo $(awk 'NR==1{print $2}' "$TMP2FILE") $D/$F >>times.out + rm -f $F.$A $A.out + ) done +done | # clean up some stack noise + egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' | + sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/ + s!'"$RUNFILE"'!$RUNFILE!g + s/^PC=0x[0-9a-f]*/pc: xxx/ + s/^pc: 0x[0-9a-f]*/pc: xxx/ + s/PC=0x[0-9a-f]*/PC=xxx/ + /^Trace\/breakpoint trap/d + /^Trace\/BPT trap/d + /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/ + /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d + /Segmentation fault/d + /^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out + +rm -f "$RUNFILE" "$TMP1FILE" "$TMP2FILE" *.$A *.a $A.out +diffmsg="" +if ! diff $golden run.out +then + diffmsg="; test output differs" + failed=1 +fi + +notinbugs=$(sed '/^== bugs/q' run.out | grep -c '^BUG') +inbugs=$(sed '1,/^== bugs/d' run.out | grep -c '^BUG') + +echo 2>&1 $inbugs known bugs';' $notinbugs unexpected bugs$diffmsg + +if [ "$failed" != "0" ]; then + echo FAILED +fi + +exit $failed |