#!/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

case X"$GOOS" in
Xnacl)
	export E=${GORUN:-$GOROOT/misc/nacl/naclrun}
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
	) 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
		/Fault in NaCl untrusted code/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
