Newer
Older
#!/usr/bin/env bash
# $1 test dir suffix (debug / release)
# SETTINGS
TESTCASE_TIMEOUT=10
LOGFILE="log_tests.txt"
EXECUTABLES="aecho2"
TESTS_DIR="`pwd`/examples2"
RES_GOOD=
RES_FAIL=
RES_TIME=
RES_SEGV=
RES_UNKN=
# ----------------------------
for FILE in $EXECUTABLES; do
if [ ! -f bin-$1/$FILE ]; then
echo "Executable $FILE is required for testing. Make sure it is in bin-$1 folder."
exit 1
fi
done
cd bin-$1/
rm -f $LOGFILE
# ----------------------------
# $1 = conv command
# $2 = return code
# $3 = input automaton
# $4 = output of conversion
function log {
echo "----------------------------------------------------------" >> $LOGFILE
echo "conv: " $1 >> $LOGFILE
echo "ret: " $2 >> $LOGFILE
echo "input automaton:" >> $LOGFILE
echo "command out:" >> $LOGFILE
echo "$4" >> $LOGFILE
}
# $1 = command for conversion. Output of such command must be (eps-)NFA !!
# $2 = automaton
function runTest2 {
OUT=`timeout $TESTCASE_TIMEOUT bash -c "cat $2 | ./aecho2 "`
RET=$?
if [ $RET == 0 ]; then # ok
return 0
fi
if [ $RET == 124 ]; then # timeout
return 2
elif [ $RET -ge 124 ]; then #segv
return 3
else
return 1
fi
}
function registerResult {
case $1 in
0)
echo -n "."
;;
1)
echo -n "x"
;;
2)
echo -n "T"
;;
3)
echo -n "E"
;;
*)
echo -n "?"
function initResults {
RES_GOOD=$(mktemp)
echo -n "0" > $RES_GOOD
RES_FAIL=$(mktemp)
echo -n "0" > $RES_FAIL
RES_TIME=$(mktemp)
echo -n "0" > $RES_TIME
RES_SEGV=$(mktemp)
echo -n "0" > $RES_SEGV
RES_UNKN=$(mktemp)
echo -n "0" > $RES_UNKN
}
function clearResults {
rm $RES_GOOD
rm $RES_FAIL
rm $RES_TIME
rm $RES_SEGV
rm $RES_UNKN
}
function outputResults {
echo "" >> $RES_GOOD
echo "" >> $RES_FAIL
echo "" >> $RES_TIME
echo "" >> $RES_SEGV
echo "" >> $RES_UNKN
# summary
echo -ne "\n\t"
echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN)
echo ""
}
# $1 - aconversions2 sequence
function runTest {
# predefined tests first
for FILE in `ls $TESTS_DIR/$1/*.xml`; do
registerResult $?
done
outputResults
}
runTest "automaton"
runTest "grammar"
runTest "regexp"
runTest "string"