From 70646580757d967190859fabad5ad0e557c001db Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Wed, 3 Jun 2015 22:39:35 +0200 Subject: [PATCH] exact subtree matching test --- ...edTree.xml => aarbology.test1.pattern.xml} | 0 ...dTree2.xml => aarbology.test1.subject.xml} | 0 makefile | 2 + tests.aarbology.sh | 169 ++++++++++++++++++ tests.astringology.sh | 2 +- 5 files changed, 172 insertions(+), 1 deletion(-) rename examples2/tree/{RankedTree.xml => aarbology.test1.pattern.xml} (100%) rename examples2/tree/{RankedTree2.xml => aarbology.test1.subject.xml} (100%) create mode 100755 tests.aarbology.sh diff --git a/examples2/tree/RankedTree.xml b/examples2/tree/aarbology.test1.pattern.xml similarity index 100% rename from examples2/tree/RankedTree.xml rename to examples2/tree/aarbology.test1.pattern.xml diff --git a/examples2/tree/RankedTree2.xml b/examples2/tree/aarbology.test1.subject.xml similarity index 100% rename from examples2/tree/RankedTree2.xml rename to examples2/tree/aarbology.test1.subject.xml diff --git a/makefile b/makefile index 06cfaa47a7..8edbdbcedb 100644 --- a/makefile +++ b/makefile @@ -84,6 +84,7 @@ debug: all-debug ./tests.aderivation.aintegral.sh debug ./tests.astringology.sh debug ./tests.anormalize.sh debug + ./tests.aarbology.sh debug release: all-release mkdir -p $(addsuffix -release, $(BINFOLDER)) @@ -100,6 +101,7 @@ release: all-release ./tests.aderivation.aintegral.sh release ./tests.astringology.sh release ./tests.anormalize.sh release + ./tests.aarbology.sh release clean : clean-debug clean-release $(RM) -r bin-debug bin-release diff --git a/tests.aarbology.sh b/tests.aarbology.sh new file mode 100755 index 0000000000..bb409e8ffb --- /dev/null +++ b/tests.aarbology.sh @@ -0,0 +1,169 @@ +#!/usr/bin/env bash + +# $1 test dir suffix (debug / release) + +# SETTINGS +TESTCASE_ITERATIONS=100 +TESTCASE_TIMEOUT=10 +LOGFILE="log_tests.txt" + +RAND_SIZE_SUBJECT=1000 +RAND_SIZE_PATTERN=4 +RAND_HEIGHT_SUBJECT=25 +RAND_HEIGHT_PATTERN=2 +RAND_ALPHABET=2 + +EXECUTABLES="arand2 atrim2 adeterminize2 anormalize2 " +TESTS_DIR="../examples2/tree" + +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." + 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 "subject:" >> $LOGFILE + cat "$3" >> $LOGFILE + echo "pattern:" >> $LOGFILE + cat "$4" >> $LOGFILE + echo "command out:" >> $LOGFILE + echo "$5" >> $LOGFILE +} + +function generatePattern { + ./arand2 -t RT --nodes $RAND_SIZE_PATTERN --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) --height $RAND_HEIGHT_PATTERN 2>/dev/null +} + +function generateSubject { + ./arand2 -t RT --nodes $RAND_SIZE_SUBJECT --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) --height $RAND_HEIGHT_SUBJECT 2>/dev/null +} + +# $1 = Occs number of occurrences expected +# $2 = command to test +# $3 = subject +# $4 = pattern +function runTest2 { + OUT=`timeout $TESTCASE_TIMEOUT bash -c "SUBJECT_FILE=\"$3\"; PATTERN_FILE=\"$4\"; $2"` + OUT=`test $1 -eq $OUT` + RET=$? + + if [ $RET == 0 ]; then # ok + return 0 + fi + + log "$2" $RET "$3" "$4" "$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 "." + ((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_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 SUBJECT_FILE in `ls $TESTS_DIR/aarbology.test*.subject.xml`; do + PATTERN_FILE=${SUBJECT_FILE%.subject.xml}.pattern.xml + if [ -f ]; then + Occs=`./aarbology2 -a exactSubtreeMatch -s "$SUBJECT_FILE" -p "$PATTERN_FILE" | ./astat2 -p quantity -s` + + runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" + registerResult $? + fi + done + + echo -n " | " + + # random tests + SUBJECT_FILE=s.xml + PATTERN_FILE=p.xml + for i in $(seq 1 $TESTCASE_ITERATIONS ); + do + cat <(generateSubject) > $SUBJECT_FILE + cat <(generatePattern) > $PATTERN_FILE + + Occs=`./aarbology2 -a exactSubtreeMatch -s "$SUBJECT_FILE" -p "$PATTERN_FILE" | ./astat2 -p quantity -s` + + runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" + registerResult $? + done + + rm $SUBJECT_FILE + rm $PATTERN_FILE + + outputResults +} + +runTest "Exact Subtree Automaton" "./arun2 -t occurrences -a <(./aarbology2 -a exactSubtreeMatchingAutomaton -p \"\$PATTERN_FILE\" | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p quantity -s" + diff --git a/tests.astringology.sh b/tests.astringology.sh index 6c76981108..008b480106 100755 --- a/tests.astringology.sh +++ b/tests.astringology.sh @@ -164,5 +164,5 @@ function runTest { } runTest "Exact Boyer Moore Horspool" "./astringology2 -a boyerMooreHorspool -s \"\$SUBJECT_FILE\" -p \"\$PATTERN_FILE\" | ./astat2 -p quantity -s" -runTest "Exact Pattern Matching Automaton" "./arun2 -t occurrences -a <(./astringology2 -a exactMatchingAutomaton -p \"\$PATTERN_FILE\" | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p quantity -s" +runTest "Exact Matching Automaton" "./arun2 -t occurrences -a <(./astringology2 -a exactMatchingAutomaton -p \"\$PATTERN_FILE\" | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p quantity -s" -- GitLab