#!/bin/sh

test -z "$testlist" && testlist="\
  objets\
  analyz\
  number\
  polyser\
  linear\
  elliptic\
  sumiter\
  graph\
  program\
  trans\
  nfields_200\
"

confdir=../config
testdir=../src/test-bench
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 echotmp

case "$1" in
  8) bitlen=64 ;;
  *) bitlen=32 ;;
esac

case "$2" in
   -c) in=co; compat=" in compatibility mode" ;;
   *)  in=in ;;
esac

case "$dotestARG" in
  "") dotestARG="sta dyn";;
esac
case "$dotestARG" in
  *sta*dyn*) if test ! $x $execdir/gp-dyn; then dotestARG="sta"; fi ;;
  *dyn*)     if test ! $x $execdir/gp-dyn; then dotestARG=""; fi ;;
esac
case "$dotestARG" in
  *sta*dyn*) if test ! $x $execdir/gp-sta; then dotestARG="dyn"; fi ;;
  *sta*)     if test ! $x $execdir/gp-sta; then dotestARG=""; fi ;;
esac
case "$dotestARG" in
  "") exit 1 ;;
esac

BUG=":"
. $confdir/version
file_bench=Bench-$version.$patch
$RM -f $file_bench
for dft in $dotestARG; do eval time$dft=0; done
for testdata in $testlist; do
  # testname : nom du fichier
  # testmul : multiplicateur de temps de calcul, 1000 par defaut
  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
    echo "Error! Missing file, can't test $testname"
    echo "Error! Missing file, cant' test $testname">>$file_bench
  else
    if test -z "$testmul"; then testmul=1000; fi
    echo $n "* Testing $testname $compat$c"
    echo $n "* Testing $testname $compat$c">>$file_bench
    for dft in $dotestARG; do
      echo $n "	for gp-$dft..$c"
      echo $n "	for gp-$dft..$c">>$file_bench
      file_test=out.$testname.$dft
      file_diff=out.$testname.$dft.diff
      $execdir/gp-$dft -test < $file_in 2>&1 | sed -n '/^?/,$p' > $file_test
      diff -c $file_out $file_test > $file_diff
      pat=`egrep -v "^  |^---|^\*\*\*|Total time|No diff" $file_diff`
      time=`sed -n 's,.*Total time spent: \(.*\),\1,p' < $file_test|tail -1`
      if test -z "$pat"; then 
        echo $n "TIME=$time$c"
        echo $n "TIME=$time$c">>$file_bench
        eval time$dft='`'expr $time '\\*' $testmul / 1000 + '$'time$dft'`'
      else
        eval BUG$dft="'[BUG]'"
        echo $n "BUG [$time]$c"
        echo $n "BUG [$time]$c">>$file_bench
      fi
    done
    echo
    echo>>$file_bench
  fi
done
for dft in $dotestARG; do
  eval echo + Total bench for gp-$dft is '$'BUG$dft '$'time$dft
  eval echo + Total bench for gp-$dft is '$'BUG$dft '$'time$dft>>$file_bench
done
