Skip to content
Snippets Groups Projects
tests.examples.sh 2.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	cat  "$3" >> $LOGFILE
    
    	echo "command out:" >> $LOGFILE
    	echo "$4" >> $LOGFILE
    }
    
    # $1 = command for conversion. Output of such command must be (eps-)NFA !!
    # $2 = automaton
    function runTest2 {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	OUT=`timeout $TESTCASE_TIMEOUT bash -c "cat $2 | ./aecho2 "`
    
    	RET=$?
    
    	if [ $RET == 0 ]; then # ok
    		return 0
    	fi
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	log "$1" $RET "$2" "$OUT"
    
    
    	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 "."
    
    			echo -n "+1" >> $RES_GOOD
    
    			echo -n "+1" >> $RES_FAIL
    
    			echo -n "+1" >> $RES_TIME
    
    			echo -n "+1" >> $RES_SEGV
    
    			echo -n "+1" >> $RES_UNKN
    
    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
    
    	echo "" >> $RES_GOOD
    	echo "" >> $RES_FAIL
    	echo "" >> $RES_TIME
    	echo "" >> $RES_SEGV
    	echo "" >> $RES_UNKN
    
    
    	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 {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	echo $1 \(./aecho2\)
    
    	initResults
    
    
    	# predefined tests first
    	for FILE in `ls $TESTS_DIR/$1/*.xml`; do
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    		runTest2 "$1" "$FILE"
    
    		registerResult $?
    	done
    
    	outputResults
    
    	clearResults
    
    }
    
    runTest "automaton"
    runTest "grammar"
    runTest "regexp"
    runTest "string"
    
    runTest "rte"