Newer
Older
# $1 test dir suffix (debug / release)
RAND_STATES=18
RAND_DENSITY="2.5"
RAND_ALPHABET=4
EXECUTABLES="arand2 aepsilon2 atrim2 adeterminize2 aminimize2 anormalize2 acompare2 aconversions2"
TESTS_DIR="`pwd`/examples2/automaton"
RES_GOOD=0
RES_FAIL=0
RES_TIME=0
RES_SEGV=0
RES_UNKN=0
# ----------------------------
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."
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
./arand2 -t FSM --density $RAND_DENSITY --states $(( $RANDOM % $RAND_STATES + 1 )) --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) 2>/dev/null
# $1 = command for conversion. Output of such command must be (eps-)NFA !!
MDFA="./aepsilon2 -e | ./adeterminize2 | ./atrim2 -e | ./aminimize2 | ./anormalize2 --labels automaton"
OUT=`timeout $TESTCASE_TIMEOUT bash -c "./acompare2 <(cat $2 | $1 | $MDFA ) <(cat $2 | $MDFA)"`
if [ $RET == 0 ]; then # ok
return 0
elif [ $RET -ge 124 ]; then #segv
return 3
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_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 {
# predefined tests first
for FILE in `ls $TESTS_DIR/aconversion.test*`; do
done
echo -n " | "
# random tests
for i in $(seq 1 $TESTCASE_ITERATIONS );
cat <(generateNFA) > $NFA_FILE
runTest2 "$1" "$NFA_FILE"
# FA -> RG -> FA
# covers: FA -> LRG, FA -> RRG, RRG <-> LRG, RRG -> FA, LRG -> FA
runTest "./aconversions2 -t rg -a outgoing | ./anormalize2 --form leftRG | ./aconversions2 -t fa"
runTest "./aconversions2 -t rg -a incoming | ./anormalize2 --form rightRG | ./aconversions2 -t fa"
# FA -> RE -> FA
# covers: FA -> RE (Brzozowski algebraic, elimination), RE -> FA (Brzozowski derivation, Thompson, Glushkov)
runTest "./aconversions2 -t re -a algebraic | ./aconversions2 -t fa -a brzozowski"
runTest "./aconversions2 -t re -a algebraic | ./aconversions2 -t fa -a thompson"
runTest "./aconversions2 -t re -a algebraic | ./aconversions2 -t fa -a glushkov "
runTest "./aconversions2 -t re -a elimination | ./aconversions2 -t fa -a brzozowski"
runTest "./aconversions2 -t re -a elimination | ./aconversions2 -t fa -a thompson"
runTest "./aconversions2 -t re -a elimination | ./aconversions2 -t fa -a glushkov"
# FA -> RE -> RRG -> LRG -> FA
# covers: FA -> RE (Brz. algebraic, elimination), RE -> RRG ( Brz. derivation, Glushkov), RRG -> LRG, LRG -> FA
runTest "./aconversions2 -t re -a algebraic | ./aconversions2 -t rg -a brzozowski | ./anormalize2 --form leftRG | ./aconversions2 -t fa"
runTest "./aconversions2 -t re -a algebraic | ./aconversions2 -t rg -a glushkov | ./anormalize2 --form leftRG | ./aconversions2 -t fa"
runTest "./aconversions2 -t re -a elimination | ./aconversions2 -t rg -a brzozowski | ./anormalize2 --form leftRG | ./aconversions2 -t fa"
runTest "./aconversions2 -t re -a elimination | ./aconversions2 -t rg -a glushkov | ./anormalize2 --form leftRG | ./aconversions2 -t fa"
# covers: FA -> RRG, FA -> LRG, RRG -> RE, LRG -> RE, RE -> FA (Brz. derivation, Thompson, Glushkov)
runTest "./aconversions2 -t rg -a outgoing | ./aconversions2 -t re | ./aconversions2 -t fa -a brzozowski"
runTest "./aconversions2 -t rg -a incoming | ./aconversions2 -t re | ./aconversions2 -t fa -a brzozowski"
runTest "./aconversions2 -t rg -a outgoing | ./aconversions2 -t re | ./aconversions2 -t fa -a thompson"
runTest "./aconversions2 -t rg -a incoming | ./aconversions2 -t re | ./aconversions2 -t fa -a thompson"
runTest "./aconversions2 -t rg -a outgoing | ./aconversions2 -t re | ./aconversions2 -t fa -a glushkov"
runTest "./aconversions2 -t rg -a incoming | ./aconversions2 -t re | ./aconversions2 -t fa -a glushkov"