blob: 28d0caa0f687a85b87b40f2a6fa1697727aa0e03 [file] [log] [blame]
Devon H. O'Dell553be842009-11-14 15:29:09 -08001#!/usr/bin/env bash
Rob Pike27fb2ab2008-06-06 12:57:00 -07002# Copyright 2009 The Go Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style
4# license that can be found in the LICENSE file.
5
Christian Himpel5c603db2010-08-30 15:40:56 -04006eval $(gomake --no-print-directory -f ../src/Make.inc go-env)
Russ Coxda392d92010-08-18 10:08:49 -04007
Rob Pike27fb2ab2008-06-06 12:57:00 -07008case X"$GOARCH" in
9Xamd64)
10 export A=6
11 ;;
Russ Coxead9f8b2009-05-31 12:35:11 -070012X386)
13 export A=8
14 ;;
15Xarm)
16 export A=5
Russ Coxb11740f2010-09-21 22:41:32 -040017 export E="$GORUN"
Russ Coxead9f8b2009-05-31 12:35:11 -070018 ;;
Rob Pike27fb2ab2008-06-06 12:57:00 -070019*)
Russ Coxead9f8b2009-05-31 12:35:11 -070020 echo 1>&2 run: unsupported '$GOARCH'
Rob Pike27fb2ab2008-06-06 12:57:00 -070021 exit 1
22esac
23
Russ Cox567673f2009-09-22 16:56:28 -070024case X"$GOOS" in
25Xnacl)
Russ Coxc6138ef2010-04-22 17:52:22 -070026 export E=${GORUN:-$GOROOT/misc/nacl/naclrun}
Russ Cox567673f2009-09-22 16:56:28 -070027esac
28
Rob Pike27fb2ab2008-06-06 12:57:00 -070029export G=${A}g
30export L=${A}l
Russ Coxfb40f882008-09-22 13:47:53 -070031export GOTRACEBACK=0
Ian Lance Taylor74a52ee2009-11-02 13:17:12 -080032export LANG=C
Russ Coxf3a97292009-11-12 14:55:26 -080033unset GREP_OPTIONS # in case user has a non-standard set
Rob Pike27fb2ab2008-06-06 12:57:00 -070034
35failed=0
36
Christian Himpel5c603db2010-08-30 15:40:56 -040037PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$GOROOT/bin}:`pwd`
Ian Lance Taylor66b261a2008-09-19 14:39:49 -070038
Russ Cox410ba582009-06-17 13:21:01 -070039RUNFILE=/tmp/gorun-$$-$USER
40TMP1FILE=/tmp/gotest1-$$-$USER
41TMP2FILE=/tmp/gotest2-$$-$USER
Rob Pike3963fe32008-08-08 10:57:23 -070042
Russ Cox46eb0f72008-09-08 15:22:45 -070043# don't run the machine out of memory: limit individual processes to 4GB.
44# on thresher, 3GB suffices to run the tests; with 2GB, peano fails.
Russ Cox5b1b2ba2011-02-09 14:38:33 -050045ulimit -v 4000000
Russ Cox46eb0f72008-09-08 15:22:45 -070046
Russ Coxda776792009-11-09 23:11:36 -080047# no core files please
48ulimit -c 0
49
Russ Coxebd27d62009-10-09 11:18:32 -070050true >pass.out >times.out
Russ Cox567673f2009-09-22 16:56:28 -070051
Russ Coxb7cb8442010-09-22 15:30:42 +100052exclude=false # exclude nothing
53golden=golden.out
54
55filterout() {
56 grep '^'"$2"'$' $1 >/dev/null
57}
58
Russ Cox2a01d722010-01-26 23:13:22 -080059for dir in . ken chan interface nilptr syntax fixedbugs bugs
Rob Pike27fb2ab2008-06-06 12:57:00 -070060do
Russ Cox1ff58972009-07-29 15:11:19 -070061 echo
62 echo '==' $dir'/'
Russ Cox60ff8cc2009-10-20 08:27:14 -070063 for i in $(ls $dir/*.go 2>/dev/null)
Russ Coxb7cb8442010-09-22 15:30:42 +100064 do (
65 if $exclude $i; then
66 exit 0 # continues for loop
67 fi
Rob Pikeab34d152008-06-06 14:27:34 -070068 export F=$(basename $i .go)
69 export D=$dir
Russ Cox33c4ff02010-09-19 23:28:32 -040070 sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|g' >$RUNFILE
Sergey 'SnakE' Gromov842d69b2009-11-30 15:07:57 -080071 if ! { time -p bash -c "bash $RUNFILE >$TMP1FILE 2>&1" ; } 2>$TMP2FILE
Rob Pikeab34d152008-06-06 14:27:34 -070072 then
Rob Pike3963fe32008-08-08 10:57:23 -070073 echo
74 echo "===========" $i
75 cat $TMP1FILE
Rob Pikeab34d152008-06-06 14:27:34 -070076 echo >&2 fail: $i
Kai Backman36057e72010-07-20 15:53:16 +030077 echo "# $i # fail" >>pass.out
Rob Pikef6d67c92009-10-13 22:48:03 -070078 elif test -s $TMP1FILE
Rob Pike3963fe32008-08-08 10:57:23 -070079 then
80 echo
81 echo "===========" $i
82 cat $TMP1FILE
Kai Backman36057e72010-07-20 15:53:16 +030083 if grep -q '^BUG' $TMP1FILE
84 then
Kai Backmand0b913fe2010-08-03 13:09:16 -070085 if [ $dir != bugs ]
86 then
87 echo >&2 bug: $i
88 fi
Kai Backman36057e72010-07-20 15:53:16 +030089 echo "# $i # fail, BUG" >>pass.out
90 else
91 echo $i >>pass.out
92 fi
Russ Cox869c3f42008-11-17 12:44:22 -080093 elif [ $dir = "bugs" ]
94 then
95 echo $i succeeded with no output.
Russ Cox567673f2009-09-22 16:56:28 -070096 else
97 echo $i >>pass.out
Rob Pikeab34d152008-06-06 14:27:34 -070098 fi
Rob Pikef6d67c92009-10-13 22:48:03 -070099 echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out
Russ Coxb7cb8442010-09-22 15:30:42 +1000100 ) done
Rob Pikebf14ef62008-07-07 10:03:10 -0700101done | # clean up some stack noise
Rob Pike3963fe32008-08-08 10:57:23 -0700102 egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' |
Russ Cox32556ef2008-09-02 14:26:59 -0700103 sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/
104 s!'$RUNFILE'!$RUNFILE!g
Russ Cox60ff8cc2009-10-20 08:27:14 -0700105 s/^PC=0x[0-9a-f]*/pc: xxx/
Russ Coxfb40f882008-09-22 13:47:53 -0700106 s/^pc: 0x[0-9a-f]*/pc: xxx/
Russ Cox60ff8cc2009-10-20 08:27:14 -0700107 s/PC=0x[0-9a-f]*/PC=xxx/
Russ Coxfb40f882008-09-22 13:47:53 -0700108 /^Trace\/breakpoint trap/d
Russ Coxb014be72009-06-05 10:59:37 -0700109 /^Trace\/BPT trap/d
Ian Lance Taylor07c54422008-11-11 10:01:51 -0800110 /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/
Kai Backman1c71ab12009-09-18 19:09:12 -0700111 /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d
Russ Cox33c4ff02010-09-19 23:28:32 -0400112 /Fault in NaCl untrusted code/d
Russ Cox6c196012010-04-05 12:51:09 -0700113 /Segmentation fault/d
Kai Backman1c71ab12009-09-18 19:09:12 -0700114 /^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out
Rob Pike126150d2008-06-06 13:28:03 -0700115
Russ Coxb7cb8442010-09-22 15:30:42 +1000116rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A *.a $A.out
Russ Cox3314f8c2009-07-29 15:30:54 -0700117diffmsg=""
Russ Coxb7cb8442010-09-22 15:30:42 +1000118if ! diff $golden run.out
Rob Pike27fb2ab2008-06-06 12:57:00 -0700119then
Russ Cox3314f8c2009-07-29 15:30:54 -0700120 diffmsg="; test output differs"
Rob Pike27fb2ab2008-06-06 12:57:00 -0700121 failed=1
122fi
Rob Pike17ee7812008-06-06 13:38:16 -0700123
Russ Cox1ff58972009-07-29 15:11:19 -0700124notinbugs=$(sed '/^== bugs/q' run.out | grep -c '^BUG')
125inbugs=$(sed '1,/^== bugs/d' run.out | grep -c '^BUG')
126
Russ Cox3314f8c2009-07-29 15:30:54 -0700127echo 2>&1 $inbugs known bugs';' $notinbugs unexpected bugs$diffmsg
Rob Pike17ee7812008-06-06 13:38:16 -0700128
Russ Cox66cdc692010-02-10 15:01:02 -0800129if [ "$failed" != "0" ]; then
130 echo FAILED
131fi
132
Rob Pike27fb2ab2008-06-06 12:57:00 -0700133exit $failed