Newer
Older
TESTCASE_ITERATIONS=200
TESTCASE_TIMEOUT=5
RAND_STATES=18
RAND_DENSITY="2.5"
RAND_ALPHABET=4
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
EXECUTABLES="arand aepsilon atrim adeterminize aminimize anormalize adiff.automaton aconversion"
# ----------------------------
for FILE in $EXECUTABLES; do
if [ ! -f bin/$FILE ]; then
echo "Executable" $FILE "is required for testing. Make sure it is in bin folder."
exit 1
fi
done
cd bin/
rm -f $LOGFILE
# ----------------------------
function mDFA {
echo "$1" | ./aepsilon | ./atrim | ./adeterminize -t FSM | ./aminimize | ./anormalize
}
function compare {
echo "$1" > tmp1.xml
echo "$2" > tmp2.xml
# relies on ret code by adiff.automaton
./adiff.automaton tmp1.xml tmp2.xml
RET=$?
rm tmp1.xml tmp2.xml
return $RET
}
# $1 = command for conversion. Output of such command must be (eps-)NFA !!
function runTest2 {
TMPNFA="nfa.xml"
./arand -d $RAND_DENSITY -n $(( $RANDOM % $RAND_STATES + 1 )) -a $(( $RANDOM % $RAND_ALPHABET + 1 )) > $TMPNFA
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
TMP=$(timeout $TESTCASE_TIMEOUT bash -c "cat $TMPNFA | $1")
RETTMP=$?
if [ $RETTMP -ge 123 ]; then
return 2
fi
mDFA1=$(mDFA "$(cat $TMPNFA)")
mDFA2=$(mDFA "$TMP")
CMP=$(compare "$mDFA1" "$mDFA2")
if [ $? == 0 ]; then
rm nfa.xml
return 0
else
echo "-----------------------------------------" >> $LOGFILE
echo "$1" >> $LOGFILE
echo "$CMP" >> $LOGFILE
echo $(cat nfa.xml) >> $LOGFILE
rm nfa.xml
return 1
fi
}
function runTest {
ITERS=$TESTCASE_ITERATIONS
RES_GOOD=0
RES_BAD=0
RES_TIMEOUT=0
if [ $# == 0 ] || [ $# -gt 2 ]; then
echo "Invalid runTest call."
exit
elif [ $# == 2 ]; then
ITERS=$2
fi
echo $1
echo -ne "\t"
for i in $(seq 1 $ITERS );
do
runTest2 "$1"
RETTEST=$?
if [ $RETTEST == 0 ]; then
echo -n "."
RES_GOOD=$((RES_GOOD + 1))
elif [ $RETTEST == 1 ]; then
echo -n "x"
RES_BAD=$((RES_BAD + 1))
elif [ $RETTEST == 2 ]; then
echo -n "T"
RES_TIMEOUT=$((RES_TIMEOUT + 1))
elif [ $RETTEST == 3 ]; then
echo -n "F"
RES_BAD=$((RES_BAD + 1))
else
echo -n "?"
fi
done
echo -ne "\n\t"
echo "RES: GOOD:" $RES_GOOD ", BAD:" $RES_BAD ", TIMEOUT:" $RES_TIMEOUT
echo ""
}
# FA -> RG -> FA
# covers: FA -> LRG, FA -> RRG, RRG <-> LRG, RRG -> FA, LRG -> FA
runTest "./aconversion -t RRG | ./aconversion -t LRG | ./aconversion -t FA"
runTest "./aconversion -t LRG | ./aconversion -t RRG | ./aconversion -t FA"
# covers: FA -> RE (Brzozowski algebraic, elimination), RE -> FA (Brzozowski derivation, Thompson, Glushkov)
runTest "./aconversion -t RE -a algebraic | ./aconversion -t FA -a brzozowski"
runTest "./aconversion -t RE -a algebraic | ./aconversion -t FA -a thompson"
runTest "./aconversion -t RE -a algebraic | ./aconversion -t FA -a glushkov "
runTest "./aconversion -t RE -a elimination | ./aconversion -t FA -a brzozowski"
runTest "./aconversion -t RE -a elimination | ./aconversion -t FA -a thompson"
runTest "./aconversion -t RE -a elimination | ./aconversion -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 "./aconversion -t RE -a algebraic | ./aconversion -t RRG -a brzozowski | ./aconversion -t LRG | ./aconversion -t FA"
runTest "./aconversion -t RE -a algebraic | ./aconversion -t RRG -a glushkov | ./aconversion -t LRG | ./aconversion -t FA"
runTest "./aconversion -t RE -a elimination | ./aconversion -t RRG -a brzozowski | ./aconversion -t LRG | ./aconversion -t FA"
runTest "./aconversion -t RE -a elimination | ./aconversion -t RRG -a glushkov | ./aconversion -t LRG | ./aconversion -t FA"
# FA -> RRG -> RE -> FA
# covers: FA -> RRG, FA -> LRG, RRG -> RE, LRG -> RE, RE -> FA (Brz. derivation, Thompson, Glushkov)
runTest "./aconversion -t RRG | ./aconversion -t RE | ./aconversion -t FA -a brzozowski"
runTest "./aconversion -t LRG | ./aconversion -t RE | ./aconversion -t FA -a brzozowski"
runTest "./aconversion -t RRG | ./aconversion -t RE | ./aconversion -t FA -a thompson"
runTest "./aconversion -t LRG | ./aconversion -t RE | ./aconversion -t FA -a thompson"
runTest "./aconversion -t RRG | ./aconversion -t RE | ./aconversion -t FA -a glushkov"
runTest "./aconversion -t LRG | ./aconversion -t RE | ./aconversion -t FA -a glushkov"