#! /bin/sh
#
# test (& time) all the pi algorithms available in hfloat ...
#
set -

BIN=bin/pi
PREC=10
if [ $# -ge 1 ]; then  PREC="$1"; fi

TIMER='/usr/bin/time -p'

# note: radix must be 10000 for this test:
case "$PREC" in
    "4") DIG='1415926535897932384626433832795028841' ;;
    "5") DIG='59230781640628620899' ;;
    "6") DIG='89549303819644288109' ;;
    "7") DIG='11854807446237996274' ;;
    "8") DIG='05321712268066130019' ;;
    "9") DIG='99581339047802759009' ;;
    "10") DIG='20653109896526918620' ;;
    "11") DIG='34343476933857817113' ;;
    "12") DIG='73736057511278872181' ;;
    "13") DIG='94096530411183066710' ;;
    "14") DIG='77105178021280129566' ;;
    "15") DIG='48783365288654365422' ;;
    "16") DIG='14505361135215808754' ;;
    "17") DIG='28150004082704666900' ;;
    "18") DIG='07075304295476539021' ;;
#    "5") DIG='062862089986280' ;;
#    "6") DIG='196442881097566593' ;;
#    "7") DIG='744623799627495' ;;
#    "8") DIG='6611195909' ;;
#    "9") DIG='83983525957' ;;
#    "10") DIG='6356620185' ;;
#    "11") DIG='12301458' ;;
#    "12") DIG='88971077' ;;
#    "13") DIG='11088717' ;;
#    "14") DIG='28727256232' ;;
#    "15") DIG='020278924170' ;;
#    "16") DIG='75443258875' ;;
#    "17") DIG='466690072446' ;;
#    "18") DIG='0707530429547653902111' ;;  # 11 min
#    "19") DIG='' ;;
#    "20") DIG='' ;;
    *) DIG=''
esac


ALG="00 01 02 03 04 05 06 07 08 09 10 13 14 15 16";
if [ "$PREC" -le "12" ]; then
    ALG="53 $ALG";
fi

for VAR in $ALG; do
    echo -n "$VAR";
    FNAME="pi${PREC}_$VAR.out";
    echo "$BIN $PREC $VAR"  >  $FNAME;
    $TIMER $BIN "$PREC" "$VAR"  >>  $FNAME 2>&1;
    grep -l $DIG $FNAME >/dev/null ||  echo "*** ! FAILED ! ***";
    echo '.';
done


FNAMES="pi${PREC}_*.out"


if [ "$DIG" != "" ]; then
    echo "DIG=$DIG ";
    echo '#total= ' `echo $FNAMES | wc -w`;
    echo -n '#ok=';
    grep "$DIG" $FNAMES | wc -l;
    echo '#fail=  ';
    grep -L "$DIG" $FNAMES
fi


function mk_summary
{
for FNAME in $FNAMES; do
    echo;
    echo $FNAME" :";
    grep 'algorithm' $FNAME;
    grep -l $DIG $FNAME >/dev/null ||  echo "*** ! FAILED ! ***";
    grep 'full prec' $FNAME;
    grep 'real [0-9]' $FNAME;
    grep 'user' $FNAME;
done
echo;
}

SUMFL="pi${PREC}_summary.txt";
mk_summary > $SUMFL;
cat $SUMFL;

exit 0
