1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#! /bin/sh
#
# test-yacas -- Script for testing Yacas
# Give help, if requested
if [ $# -eq 0 ] || [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ]; then
echo "Usage: $0 <cmd> <dir> <script>..."
echo " cmd Command plus options, needed to run Yacas"
echo " dir Directory in which scripts reside"
echo " script... Test scripts to be run"
echo "Test script may reside in <dir> or in the current directory"
echo "Exit status is number of tests scripts which fail"
echo "Example:"
echo " $0 \"../src/Debug/yacas --archive ../src/scripts.dat\" . short*.yts"
exit 0
fi
# Parse arguments
if [ $# -lt 2 ]; then
echo "Error: $0: Missing parameters"
exit 255
fi
CMD="$1"
SCRIPTDIR="$2"
shift
shift
SCRIPTS=$*
# run the tests
FAILED_TESTS="" # list of failed tests
FAILURES=0 # number of failed tests
TOTALTESTS=0 # total number of tests
TESTFILE=/tmp/test-yacas.$$
TIMEFILE=/tmp/time-yacas.$$
VERSIONF=/tmp/version-yacas-$$.ys
LOGFILE=yacas-logfile.txt
echo "Print(Version());" > $VERSIONF
VERSION=`$CMD $VERSIONF`
COMMENT=`$CMD $VERSIONF`
#DATECMD="date \"+%F %T\""
#echo "$DATECMD"
#rm $VERSIONF
echo "/*" >> $LOGFILE
echo "Command = \"$CMD\"" | tee -a $LOGFILE
echo "Version = $VERSION" | tee -a $LOGFILE
echo "Comment = $COMMENT" | tee -a $LOGFILE
echo "Date = \"`date "+%F %T"`\"" | tee -a $LOGFILE
echo "Logfile = \"$LOGFILE\"" | tee -a $LOGFILE
echo "*/" >> $LOGFILE
REALTOT="0"
USERTOT="0"
SYSSTOT="0"
for scr in $SCRIPTS; do
if [ -f $SCRIPTDIR/$scr ]; then
f=$SCRIPTDIR/$scr
else
f=$scr
fi
# if grep -i "interrupt" $TESTFILE > /dev/null; then
# PASSFAIL=Interrupted
# fi
echo "Running $scr"
if [ -f $TESTFILE ]; then rm $TESTFILE ; fi
/bin/sh -c "time -p ($CMD $f || echo \"Error: exit status $?\") | tee $TESTFILE" \
2> $TIMEFILE \
|| (echo "Error -- User interrupt" > $TESTFILE)
# cat $TIMEFILE
if grep -E "\*\*\*\*\*\*|Error|interrupt" $TESTFILE > /dev/null; then
PASSFAIL=Fail
FAILED_TESTS="$FAILED_TESTS $scr"
FAILURES=`expr $FAILURES + 1`
if grep -i "interrupt" $TESTFILE > /dev/null; then
PASSFAIL=Interrupted
fi
else
PASSFAIL=Pass
fi
TOTALTESTS=`expr $TOTALTESTS + 1`
REAL=`grep real $TIMEFILE | sed 's/real//'`
USER=`grep user $TIMEFILE | sed 's/user//'`
SYSS=`grep sys $TIMEFILE | sed 's/sys//'`
LOGLINE="{\"$scr\", $VERSION, \"`date "+%F %T"`\", $REAL, $USER, $SYSS, $PASSFAIL},"
echo "$LOGLINE" | tee -a $LOGFILE
REALTOT="$REALTOT+$REAL"
USERTOT="$USERTOT+$USER"
SYSSTOT="$SYSSTOT+$SYSS"
### exit
done
if [ $FAILURES -eq 0 ]; then
PASSFAIL=Pass
else
PASSFAIL=Fail
fi
REAL=`$CMD -i "Print(RoundTo($REALTOT,2));"`
USER=`$CMD -i "Print(RoundTo($USERTOT,2));"`
SYSS=`$CMD -i "Print(RoundTo($SYSSTOT,2));"`
LOGLINE="{\"Total\", $VERSION, \"`date "+%F %T"`\", $REAL, $USER, $SYSS, $PASSFAIL},"
echo "$LOGLINE" | tee -a $LOGFILE
rm $TESTFILE $TIMEFILE
# report
if [ $FAILURES -eq 0 ]; then
RES="All $TOTALTESTS tests PASSED"
else
if [ $FAILURES -eq 1 ]; then
echo "Failed test: $FAILED_TESTS"
else
echo "Failed tests: $FAILED_TESTS"
fi
RES="$FAILURES of $TOTALTESTS tests FAILED"
fi
EQS=`echo $RES | sed 's/./=/g'`
echo "Command = \"$CMD\""
echo "Version = $VERSION"
echo "Date = \"`date "+%F %T"`\""
echo "Logfile = \"$LOGFILE\""
echo "/*$EQS" | tee -a $LOGFILE
if [ "x$FAILED_TESTS" != "x" ]; then
echo "Failed = $FAILED_TESTS" | tee -a $LOGFILE
fi
echo " $RES " | tee -a $LOGFILE
echo "$EQS*/" | tee -a $LOGFILE
exit $FAILURES
|