summaryrefslogtreecommitdiff
path: root/test/run
diff options
context:
space:
mode:
Diffstat (limited to 'test/run')
-rwxr-xr-xtest/run130
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