From dd6b944d5ccb7e96077aea5d5620cd46deff3f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz> Date: Tue, 16 Sep 2014 21:16:19 +0200 Subject: [PATCH] conversions bash script test simplify --- tests.aconversion.sh | 172 ++++++++++++++++++++----------------------- 1 file changed, 79 insertions(+), 93 deletions(-) diff --git a/tests.aconversion.sh b/tests.aconversion.sh index ddc6407455..42a8e65f8a 100755 --- a/tests.aconversion.sh +++ b/tests.aconversion.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash -set -o pipefail - +# SETTINGS TESTCASE_ITERATIONS=100 TESTCASE_TIMEOUT=10 LOGFILE="log_tests.txt" @@ -11,9 +10,15 @@ RAND_DENSITY="2.5" RAND_ALPHABET=4 EXECUTABLES="arand2 aepsilon2 atrim2 adeterminize2 aminimize2 anormalize2 adiff2 aconversions2" - TESTS_DIR="../examples2/automaton" +RES_GOOD=0 +RES_FAIL=0 +RES_TIME=0 +RES_SEGV=0 +RES_UNKN=0 + + # ---------------------------- for FILE in $EXECUTABLES; do @@ -28,20 +33,18 @@ rm -f $LOGFILE # ---------------------------- -function mDFA { - echo "$1" | ./aepsilon2 | ./atrim2 | ./adeterminize2 -t FSM | ./atrim2 | ./aminimize2 | ./anormalize2 -} - -function compare { - echo "$1" > tmp1.xml - echo "$2" > tmp2.xml - - # relies on ret code by adiff.automaton - ./adiff2 tmp1.xml tmp2.xml - RET=$? - rm tmp1.xml tmp2.xml - - return $RET +# $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 "$3" >> $LOGFILE + echo "command out:" >> $LOGFILE + echo "$4" >> $LOGFILE } function generateNFA { @@ -51,72 +54,81 @@ function generateNFA { # $1 = command for conversion. Output of such command must be (eps-)NFA !! # $2 = automaton function runTest2 { + MDFA="./aepsilon2 | ./atrim2 | ./adeterminize2 -t FSM | ./atrim2 | ./aminimize2 | ./anormalize2" + TMPNFA="nfa.xml" echo "$2" > $TMPNFA - TMP=$(timeout $TESTCASE_TIMEOUT bash -c "cat $TMPNFA | $1" 2>/dev/null) - RETTMP=$? + OUT=`timeout $TESTCASE_TIMEOUT bash -c "./adiff2 <(cat $TMPNFA | $1 | $MDFA ) <(cat $TMPNFA | $MDFA)"` + RET=$? - # segfault - if [ $RETTMP -eq 134 ]; then - return 3 + if [ $RET == 0 ]; then # ok + rm $TMPNFA + return 0 fi - # timeout - if [ $RETTMP -ge 123 ]; then + log "$1" $RET "$(cat $TMPNFA)" "$OUT" + + if [ $RET == 124 ]; then # timeout return 2 - fi - - mDFA1=$(mDFA "$(cat $TMPNFA)") - mDFA2=$(mDFA "$TMP") - - # as pipefail bash option is turned on, first non-zero exit value of any program in pipe sequence is return code of whole sequence - CMP=$(compare "$mDFA1" "$mDFA2") - if [ $? == 0 ]; then - rm $TMPNFA - return 0 + elif [ $RET -ge 124 ]; then #segv + return 3 else - echo "-----------------------------------------" >> $LOGFILE - echo "$1" >> $LOGFILE - echo "$CMP" >> $LOGFILE - echo $(cat $TMPNFA) >> $LOGFILE - rm $TMPNFA return 1 fi } -# $1 - aconversions2 sequence -function runTest { +function registerResult { + case $1 in + 0) + echo -n "." + ((RES_GOOD++)) + ;; + 1) + echo -n "x" + ((RES_FAIL++)) + ;; + 2) + echo -n "T" + ((RES_TIME++)) + ;; + 3) + echo -n "E" + ((RES_SEGV++)) + ;; + *) + echo -n "?" + ((RES_UNKN++)) + ;; + esac +} + +function clearResults { RES_GOOD=0 RES_FAIL=0 - RES_TIMEOUT=0 - RES_SIGSEGV=0 + RES_TIME=0 + RES_SEGV=0 + RES_UNKN=0 +} + +function outputResults { + # summary + echo -ne "\n\t" + echo "RES: GOOD:" $RES_GOOD ", FAIL:" $RES_FAIL ", TIME:" $RES_TIME ", SEGV:" $RES_SEGV, "UNKN:" $RES_UNKN + echo "" +} +# $1 - aconversions2 sequence +function runTest { echo $1 echo -ne "\t" + clearResults + # predefined tests first for FILE in `ls $TESTS_DIR/aconversion.test*`; do - AUTOMATON=$(cat $FILE) - - runTest2 "$1" "$AUTOMATON" - TEST_EXITVALUE=$? - - if [ $TEST_EXITVALUE == 0 ]; then - echo -n "." - RES_GOOD=$((RES_GOOD + 1)) - elif [ $TEST_EXITVALUE == 1 ]; then - echo -n "x" - RES_FAIL=$((RES_FAIL + 1)) - elif [ $TEST_EXITVALUE == 2 ]; then - echo -n "T" - RES_TIMEOUT=$((RES_TIMEOUT + 1)) - elif [ $TEST_EXITVALUE == 3 ]; then - echo -n "F" - RES_SIGSEGV=$((RES_SIGSEGV + 1)) - else - echo -n "?" - fi + runTest2 "$1" "$(cat $FILE)" + registerResult $? done echo -n " | " @@ -124,37 +136,11 @@ function runTest { # random tests for i in $(seq 1 $TESTCASE_ITERATIONS ); do - RAND_AUTOMATON=$(generateNFA) - if [ $? -eq 139 ]; then - echo -n "F" - RES_SIGSEGV=$((RES_SIGSEGV + 1)) - continue - fi - - runTest2 "$1" "$RAND_AUTOMATON" - TEST_EXITVALUE=$? + runTest2 "$1" "$(generateNFA)" + registerResult $? + done - if [ $TEST_EXITVALUE == 0 ]; then - echo -n "." - RES_GOOD=$((RES_GOOD + 1)) - elif [ $TEST_EXITVALUE == 1 ]; then - echo -n "x" - RES_FAIL=$((RES_FAIL + 1)) - elif [ $TEST_EXITVALUE == 2 ]; then - echo -n "T" - RES_TIMEOUT=$((RES_TIMEOUT + 1)) - elif [ $TEST_EXITVALUE == 3 ]; then - echo -n "F" - RES_SIGSEGV=$((RES_SIGSEGV + 1)) - else - echo -n "?" - fi - done - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $RES_GOOD ", BAD:" $RES_FAIL ", TIMEOUT:" $RES_TIMEOUT ", SIGSEGV:" $RES_SIGSEGV - echo "" + outputResults } # FA -> RG -> FA -- GitLab