Skip to content
Snippets Groups Projects
Commit bcf84238 authored by Jan Trávníček's avatar Jan Trávníček
Browse files

shell test convert binary

parent ff971762
No related branches found
No related tags found
No related merge requests found
CFG ( CFG (
{'S', 'A', 'B', 'C', 'X'}, {S, A, B, C, X},
{'a', 'b', 'c', 'd', 'e'}, {a, b, c, d, e},
{'S' -> 'C' 'd' 'e' 'S' 'e' | 'd' 'd' 'B' | 'c' 'A', {S -> C d e S e | d d B | c A,
'A' -> 'a' 'd' 'X' | 'b' 'b' 'X', A -> a d X | b b X,
'X' -> 'c' 'a' 'd' 'X' |, X -> c a d X |,
'B' -> 'b' 'a' 'C' 'd' |, B -> b a C d |,
'C' -> 'A' 'c' 'a' | 'a' C -> A c a | a
}, },
'S') S)
CFG ( CFG (
{'S', 'A', 'B', 'C', 'X'}, {S, A, B, C, X},
{'a', 'b', 'c', 'd', 'e'}, {a, b, c, d, e},
{'S' -> 'C' 'd' 'e' 'S' 'e' | 'd' 'd' 'B' | 'c' 'A', {S -> C d e S e | d d B | c A,
'A' -> 'C' 'd' | 'b' 'b', A -> C d | b b,
'B' -> 'b' 'a' 'C' 'd' |, B -> b a C d |,
'C' -> 'b' 'b' 'c' 'a' 'X' | 'a' 'X', C -> b b c a X | a X,
'X' -> 'd' 'c' 'a' 'X' | X -> d c a X |
}, },
'S') S)
CFG ( CFG (
{'A', 'B', 'C', 'D', 'E'}, {A, B, C, D, E},
{'a', 'b'}, {a, b},
{'A' -> 'b' | 'A' 'B' | 'a', {A -> b | A B | a,
'B' -> 'A' 'C', B -> A C,
'C' -> 'a' 'E' 'D', C -> a E D,
'D' -> 'a' | 'B' 'E', D -> a | B E,
'E' -> 'B' 'A' | 'b' | E -> B A | b |
}, },
'E') E)
CFG ( CFG (
{'S', 'A', 'B', 'C'}, {S, A, B, C},
{'a', 'b', 'c', 'd', 'e'}, {a, b, c, d, e},
{'S' -> 'C' 'd' 'e' 'S' 'e' | 'd' 'd' 'B' | 'c' 'A', {S -> C d e S e | d d B | c A,
'A' -> 'C' 'd' | 'b' 'b', A -> C d | b b,
'B' -> 'b' 'a' 'C' 'd' |, B -> b a C d |,
'C' -> 'A' 'c' 'a' | 'a' C -> A c a | a
}, },
'S') S)
CFG ( CFG (
{'S', 'B', 'C', 'D', 'E'}, {S, B, C, D, E},
{'a', 'b'}, {a, b},
{'S' -> 'D' 'S' | 'a' | 'C' 'D', {S -> D S | a | C D,
'C' -> 'D' 'a' 'B' | 'b', C -> D a B | b,
'B' -> 'S' 'D' |, B -> S D |,
'D' -> 'B' 'E', D -> B E,
'E' -> 'a' | 'C' 'D' E -> a | C D
}, },
'D') D)
#!/usr/bin/env bash
# $1 test dir suffix (debug / release)
# SETTINGS
TESTCASE_TIMEOUT=10
LOGFILE="log_tests.txt"
EXECUTABLES="aconvert2"
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
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 {
OUT=`timeout $TESTCASE_TIMEOUT bash -c "cat $2 | ./aconvert2 --$1_from_string "`
RET=$?
if [ $RET == 0 ]; then # ok
return 0
fi
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
;;
1)
echo -n "x"
echo -n "+1" >> $RES_FAIL
;;
2)
echo -n "T"
echo -n "+1" >> $RES_TIME
;;
3)
echo -n "E"
echo -n "+1" >> $RES_SEGV
;;
*)
echo -n "?"
echo -n "+1" >> $RES_UNKN
;;
esac
}
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 {
echo $1 \(./aconvert2 --$1_from_string\)
echo -ne "\t"
initResults
# predefined tests first
for FILE in `ls $TESTS_DIR/$1/*.txt`; do
runTest2 "$1" "$FILE"
registerResult $?
done
outputResults
clearResults
}
runTest "automaton"
runTest "grammar"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment