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

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
