#!/bin/sh bitlen=$1; shift testlist=$@ if (tail -n 1 $0 >/dev/null 2>&1); then tail='tail -n' else tail='tail -' fi if (head -n 1 $0 >/dev/null 2>&1); then head='head -n' else head='head -' fi wrln () { echo "$1"; echo "$1" >> $file_bench; } wr () { echo $n "$1$c"; echo $n "$1$c" >> $file_bench; } confdir=../config testdir=../src/test execdir=. if test -f /bin/rm ; then RM=/bin/rm; else RM=rm ; fi if sh -c 'test -x /bin/sh' 2>&-; then x=-x; else x=-r; fi (echo "hi there\c" ; echo " ") > echotmp if grep c echotmp >/dev/null 2>&1 ; then n=-n; c=; else n=; c='\c'; fi $RM -f echotmp . $confdir/version file_bench=Bench-$VersionMajor.$VersionMinor.$patch if (touch $file_bench 2> /dev/null); then SUF= else if test ! $x $execdir/gp.exe; then echo "build gp.exe first" >&2; exit 1 fi if (echo | gp --test -q 2> /dev/null); then gp=gp else gp="command /c gp" fi if (expr 2 \* 2 2> /dev/null); then exprbug=0; else exprbug=1; fi SUF="exe"; file_bench=Bench.$patch fi $RM -f $file_bench dotestSUF=${dotestSUF:-"sta dyn"} for arg in $dotestSUF; do case "$arg" in sta|dyn) if test $x $execdir/gp-$arg; then SUF="$SUF $arg"; fi ;; esac done file_test=gp.out for suf in $SUF; do eval time$suf=0 files$suf=; done for testdata in $testlist; do O=$IFS;IFS=_;set $testdata;IFS=$O;testname=$1;testmul=$2 file_in=$testdir/in/$testname file_out=$testdir/$bitlen/$testname if test ! -r $file_out; then file_out=$testdir/32/$testname; fi if test ! -r $file_out; then touch $file_out; fi if test ! -r $file_in; then wrln "Error! Missing file, can't test $testname" exit 1 fi testmul=${testmul:-1000} wr "* Testing $testname $c" for suf in $SUF; do wr " for gp-$suf..$c" case "$suf" in exe) file_diff=$testname.dif;; *) file_diff=$testname-$suf.dif gp=$execdir/gp-$suf;; esac $gp -q --test < $file_in > $file_test 2>&1 diff -c $file_out $file_test > $file_diff pat=`grep "^[-+!] " $file_diff | grep -v "Total time"` time=`${tail}2 $file_test | sed -n 's,.*Total time spent: \(.*\),\1,p'` if test -n "$time"; then eval t='$'time$suf if test -n "$exprbug"; then t=`expr $time \'\*\' $testmul / 1000 + $t` else t=`expr $time '*' $testmul / 1000 + $t` fi eval time$suf=$t fi if test -z "$pat"; then wr "TIME=$time"; else eval BUG$suf=BUG eval files$suf=\"'$'files$suf $file_diff\" wr "BUG [${time:-0}]" fi done wrln done $RM -f $file_test BUG= for suf in $SUF; do B=`eval echo '$'BUG$suf`; BUG="$BUG$B" t=`eval echo '$'time$suf` if test -n "$B"; then B=' [BUG]'; fi wrln "+++$B Total bench for gp-$suf is $t" done if test -z "$BUG"; then exit 0; fi pwd=`pwd` wrln wrln "PROBLEMS WERE NOTED. The following files list them in diff format: " wrln "Directory: $pwd" bugp=; buge=; for suf in $SUF; do B=`eval echo '$'BUG$suf`; BUG="$BUG$B" if test -n "$B"; then flist=`eval echo '$'files$suf` for f in $flist; do wrln " $f" case "$f" in *program*) bugp="$suf$bugp";; esac done fi done case "x$bugp" in x) file_diff=;; xsta|xdyn) end=" (gp-$bugp only)" file_diff=program-$bugp.dif;; xexe) end=" (gp-$bugp)" file_diff=program.dif;; x*) end="" file_diff=program-sta.dif;; esac if test -n "$file_diff"; then len=`wc -l $file_diff | sed -e 's/ *\([0-9]*\).*/\1/'` pat=`${head}4 $file_diff|${tail}1|grep "112,122"` sys0190=`grep "^+ SYS0190\>" $file_diff` if test $len -eq 51 -a -n "$sys0190"; then len=49 # more verbose error message on OS/2 fi if test $len -eq 49 -a -n "$pat"; then cat << EOT NOTE: the problem noted in 'program' is that install() does not work in your configuration$end, so you will not be able to use this feature. Otherwise you can safely ignore the above warning. EOT fi fi exit 1