blob: b3f54f12f24cdf2d1c5f9bcc10e92781700a13e1 [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
Kai Backman1c71ab12009-09-18 19:09:12 -07006export E=""
Rob Pike27fb2ab2008-06-06 12:57:00 -07007case X"$GOARCH" in
8Xamd64)
9 export A=6
10 ;;
Russ Coxead9f8b2009-05-31 12:35:11 -070011X386)
12 export A=8
13 ;;
14Xarm)
15 export A=5
Kai Backmandf3a5442010-04-15 12:47:49 +030016 export E=${GORUN:-qemu-arm -cpu cortex-a8}
Russ Coxead9f8b2009-05-31 12:35:11 -070017 ;;
Rob Pike27fb2ab2008-06-06 12:57:00 -070018*)
Russ Coxead9f8b2009-05-31 12:35:11 -070019 echo 1>&2 run: unsupported '$GOARCH'
Rob Pike27fb2ab2008-06-06 12:57:00 -070020 exit 1
21esac
22
Russ Cox567673f2009-09-22 16:56:28 -070023case X"$GOOS" in
24Xnacl)
Russ Coxc6138ef2010-04-22 17:52:22 -070025 export E=${GORUN:-$GOROOT/misc/nacl/naclrun}
Russ Cox567673f2009-09-22 16:56:28 -070026esac
27
Rob Pike27fb2ab2008-06-06 12:57:00 -070028export G=${A}g
29export L=${A}l
Russ Coxfb40f882008-09-22 13:47:53 -070030export GOTRACEBACK=0
Ian Lance Taylor74a52ee2009-11-02 13:17:12 -080031export LANG=C
Russ Coxf3a97292009-11-12 14:55:26 -080032unset GREP_OPTIONS # in case user has a non-standard set
Rob Pike27fb2ab2008-06-06 12:57:00 -070033
34failed=0
35
Kai Backman1c71ab12009-09-18 19:09:12 -070036PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$HOME/bin}:`pwd`
Ian Lance Taylor66b261a2008-09-19 14:39:49 -070037
Russ Cox410ba582009-06-17 13:21:01 -070038RUNFILE=/tmp/gorun-$$-$USER
39TMP1FILE=/tmp/gotest1-$$-$USER
40TMP2FILE=/tmp/gotest2-$$-$USER
Rob Pike3963fe32008-08-08 10:57:23 -070041
Russ Cox46eb0f72008-09-08 15:22:45 -070042# don't run the machine out of memory: limit individual processes to 4GB.
43# on thresher, 3GB suffices to run the tests; with 2GB, peano fails.
44ulimit -v 4000000
45
Russ Coxda776792009-11-09 23:11:36 -080046# no core files please
47ulimit -c 0
48
Russ Coxebd27d62009-10-09 11:18:32 -070049true >pass.out >times.out
Russ Cox567673f2009-09-22 16:56:28 -070050
Russ Cox2a01d722010-01-26 23:13:22 -080051for dir in . ken chan interface nilptr syntax fixedbugs bugs
Rob Pike27fb2ab2008-06-06 12:57:00 -070052do
Russ Cox1ff58972009-07-29 15:11:19 -070053 echo
54 echo '==' $dir'/'
Russ Cox60ff8cc2009-10-20 08:27:14 -070055 for i in $(ls $dir/*.go 2>/dev/null)
Rob Pikeab34d152008-06-06 14:27:34 -070056 do
Rob Pikeab34d152008-06-06 14:27:34 -070057 export F=$(basename $i .go)
58 export D=$dir
Russ Cox567673f2009-09-22 16:56:28 -070059 sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|' >$RUNFILE
Sergey 'SnakE' Gromov842d69b2009-11-30 15:07:57 -080060 if ! { time -p bash -c "bash $RUNFILE >$TMP1FILE 2>&1" ; } 2>$TMP2FILE
Rob Pikeab34d152008-06-06 14:27:34 -070061 then
Rob Pike3963fe32008-08-08 10:57:23 -070062 echo
63 echo "===========" $i
64 cat $TMP1FILE
Rob Pikeab34d152008-06-06 14:27:34 -070065 echo >&2 fail: $i
Rob Pikef6d67c92009-10-13 22:48:03 -070066 elif test -s $TMP1FILE
Rob Pike3963fe32008-08-08 10:57:23 -070067 then
68 echo
69 echo "===========" $i
70 cat $TMP1FILE
Russ Cox869c3f42008-11-17 12:44:22 -080071 elif [ $dir = "bugs" ]
72 then
73 echo $i succeeded with no output.
Russ Cox567673f2009-09-22 16:56:28 -070074 else
75 echo $i >>pass.out
Rob Pikeab34d152008-06-06 14:27:34 -070076 fi
Rob Pikef6d67c92009-10-13 22:48:03 -070077 echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out
Rob Pikeab34d152008-06-06 14:27:34 -070078 done
Rob Pikebf14ef62008-07-07 10:03:10 -070079done | # clean up some stack noise
Rob Pike3963fe32008-08-08 10:57:23 -070080 egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' |
Russ Cox32556ef2008-09-02 14:26:59 -070081 sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/
82 s!'$RUNFILE'!$RUNFILE!g
Russ Cox60ff8cc2009-10-20 08:27:14 -070083 s/^PC=0x[0-9a-f]*/pc: xxx/
Russ Coxfb40f882008-09-22 13:47:53 -070084 s/^pc: 0x[0-9a-f]*/pc: xxx/
Russ Cox60ff8cc2009-10-20 08:27:14 -070085 s/PC=0x[0-9a-f]*/PC=xxx/
Russ Coxfb40f882008-09-22 13:47:53 -070086 /^Trace\/breakpoint trap/d
Russ Coxb014be72009-06-05 10:59:37 -070087 /^Trace\/BPT trap/d
Ian Lance Taylor07c54422008-11-11 10:01:51 -080088 /RUNFILE/ s/line 1: *[0-9]*/line 1: PID/
Kai Backman1c71ab12009-09-18 19:09:12 -070089 /^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d
Russ Cox6c196012010-04-05 12:51:09 -070090 /Segmentation fault/d
Kai Backman1c71ab12009-09-18 19:09:12 -070091 /^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out
Rob Pike126150d2008-06-06 13:28:03 -070092
Rob Pikef6d67c92009-10-13 22:48:03 -070093rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A $A.out
Russ Cox3314f8c2009-07-29 15:30:54 -070094diffmsg=""
Rob Pike27fb2ab2008-06-06 12:57:00 -070095if ! diff run.out golden.out
96then
Russ Cox3314f8c2009-07-29 15:30:54 -070097 diffmsg="; test output differs"
Rob Pike27fb2ab2008-06-06 12:57:00 -070098 failed=1
99fi
Rob Pike17ee7812008-06-06 13:38:16 -0700100
Russ Cox1ff58972009-07-29 15:11:19 -0700101notinbugs=$(sed '/^== bugs/q' run.out | grep -c '^BUG')
102inbugs=$(sed '1,/^== bugs/d' run.out | grep -c '^BUG')
103
Russ Cox3314f8c2009-07-29 15:30:54 -0700104echo 2>&1 $inbugs known bugs';' $notinbugs unexpected bugs$diffmsg
Rob Pike17ee7812008-06-06 13:38:16 -0700105
Russ Cox66cdc692010-02-10 15:01:02 -0800106if [ "$failed" != "0" ]; then
107 echo FAILED
108fi
109
Rob Pike27fb2ab2008-06-06 12:57:00 -0700110exit $failed