#!/bin/sh wrln () { echo "$1"; echo "$1" >> $file_bench; } wr () { echo $n "$1$c"; echo $n "$1$c" >> $file_bench; } confdir=../config testdir=../src/test execdir=. #Format: filename_weight (weight = 1000 if omitted) # individual times are not modified whereas accumulated time is weighed # by (weight / 1000) test -z "$testlist" && testlist="\ objets\ analyz\ number\ polyser\ linear\ elliptic\ sumiter\ graph\ program\ trans\ nfields_200\ " 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 echotmp case "$1" in 8) bitlen=64 ;; *) bitlen=32 ;; esac case "$2" in -c) testlist=compat;; -g) testlist=ploth;; -a) testlist=all;; esac . $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_in -o ! -r $file_out; then wrln "Error! Missing file, can't test $testname" else 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 fi done $RM $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";; *elliptic*) buge="$suf$buge";; esac done fi done case "$buge" in *) end="" file_diff=elliptic-sta.dif;; sta|dyn) end=" (gp-$buge only)" file_diff=elliptic-$buge.dif;; exe) end=" (gp-$buge)" file_diff=elliptic.dif;; esac len=`wc -l $file_diff | sed -e 's/ *\([0-9]*\).*/\1/'` pat=`head -4 $file_diff|tail -1|grep "141,154"` if test $len -eq 46 -a -n "$pat"; then cat << EOT NOTE: the problem noted in 'elliptic' boils down to different FPU and compiler optimizations than on our test machine. It can safely be ignored, the difference being insignificant given the requested precision. EOT fi case "$bugp" in *) end="" file_diff=program-sta.dif;; sta|dyn) end=" (gp-$bugp only)" file_diff=program-$bugp.dif;; exe) end=" (gp-$bugp)" file_diff=program.dif;; esac len=`wc -l $file_diff | sed -e 's/ *\([0-9]*\).*/\1/'` pat=`head -4 $file_diff|tail -1|grep "108,118"` if test $len -eq 29 -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