mirror of
https://github.com/golang/go
synced 2024-11-25 13:57:57 -07:00
389d55fadf
For example, if you are debugging an optimization problem you can now run GCFLAGS=-N gotest This is a convention for make, not for the general build, so it may go away or be done differently in the eventual 'go' command. The plan is that people will be able to test their code for rune safety by doing GCFLAGS=-r. R=golang-dev, bradfitz, lvd CC=golang-dev https://golang.org/cl/5294042
131 lines
2.8 KiB
Bash
Executable File
131 lines
2.8 KiB
Bash
Executable File
#!/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 ${GCFLAGS}"
|
|
export L=${A}l
|
|
export GOTRACEBACK=0
|
|
export LANG=C
|
|
unset GREP_OPTIONS # in case user has a non-standard set
|
|
|
|
failed=0
|
|
|
|
PATH=${GOBIN:-$GOROOT/bin}:`pwd`:/bin:/usr/bin:/usr/local/bin
|
|
|
|
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 syntax dwarf 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
|