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