#!/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 $(../bin/tool/dist env)
export GOARCH GOOS GOROOT
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

# TODO: We add the tool directory to the PATH to avoid thinking about a better way.
PATH="$GOROOT/bin/tool":$PATH

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 safe 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
