From dd6b944d5ccb7e96077aea5d5620cd46deff3f58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz>
Date: Tue, 16 Sep 2014 21:16:19 +0200
Subject: [PATCH] conversions bash script test simplify

---
 tests.aconversion.sh | 172 ++++++++++++++++++++-----------------------
 1 file changed, 79 insertions(+), 93 deletions(-)

diff --git a/tests.aconversion.sh b/tests.aconversion.sh
index ddc6407455..42a8e65f8a 100755
--- a/tests.aconversion.sh
+++ b/tests.aconversion.sh
@@ -1,7 +1,6 @@
 #!/usr/bin/env bash
 
-set -o pipefail
-
+# SETTINGS
 TESTCASE_ITERATIONS=100
 TESTCASE_TIMEOUT=10
 LOGFILE="log_tests.txt"
@@ -11,9 +10,15 @@ RAND_DENSITY="2.5"
 RAND_ALPHABET=4
 
 EXECUTABLES="arand2 aepsilon2 atrim2 adeterminize2 aminimize2 anormalize2 adiff2 aconversions2"
-
 TESTS_DIR="../examples2/automaton"
 
+RES_GOOD=0
+RES_FAIL=0
+RES_TIME=0
+RES_SEGV=0
+RES_UNKN=0
+
+
 # ----------------------------
 
 for FILE in $EXECUTABLES; do
@@ -28,20 +33,18 @@ rm -f $LOGFILE
 
 # ----------------------------
 
-function mDFA {
-	echo "$1" | ./aepsilon2 | ./atrim2 | ./adeterminize2 -t FSM | ./atrim2 | ./aminimize2 | ./anormalize2
-}
-
-function compare {
-	echo "$1" > tmp1.xml
-	echo "$2" > tmp2.xml
-
-	# relies on ret code by adiff.automaton
-	./adiff2 tmp1.xml tmp2.xml
-	RET=$?
-	rm tmp1.xml tmp2.xml
-
-	return $RET
+# $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 "$3" >> $LOGFILE
+	echo "command out:" >> $LOGFILE
+	echo "$4" >> $LOGFILE
 }
 
 function generateNFA {
@@ -51,72 +54,81 @@ function generateNFA {
 # $1 = command for conversion. Output of such command must be (eps-)NFA !!
 # $2 = automaton
 function runTest2 {
+	MDFA="./aepsilon2 | ./atrim2 | ./adeterminize2 -t FSM | ./atrim2 | ./aminimize2 | ./anormalize2"
+
 	TMPNFA="nfa.xml"
 	echo "$2" > $TMPNFA
 
-	TMP=$(timeout $TESTCASE_TIMEOUT bash -c "cat $TMPNFA | $1" 2>/dev/null)
-	RETTMP=$?
+	OUT=`timeout $TESTCASE_TIMEOUT bash -c "./adiff2 <(cat $TMPNFA | $1 | $MDFA ) <(cat $TMPNFA | $MDFA)"`
+	RET=$?
 
-	# segfault
-	if [ $RETTMP -eq 134 ]; then
-		return 3
+	if [ $RET == 0 ]; then # ok
+		rm $TMPNFA
+		return 0
 	fi
 
-	# timeout
-	if [ $RETTMP -ge 123 ]; then
+	log "$1" $RET "$(cat $TMPNFA)" "$OUT"
+	
+	if [ $RET == 124 ]; then # timeout
 		return 2
-	fi
-
-	mDFA1=$(mDFA "$(cat $TMPNFA)")
-	mDFA2=$(mDFA "$TMP")
-
-	# as pipefail bash option is turned on, first non-zero exit value of any program in pipe sequence is return code of whole sequence
-	CMP=$(compare "$mDFA1" "$mDFA2")
-	if [ $? == 0 ]; then
-		rm $TMPNFA
-		return 0
+	elif [ $RET -ge 124 ]; then #segv
+		return 3
 	else
-		echo "-----------------------------------------" >> $LOGFILE
-		echo "$1" >> $LOGFILE
-		echo "$CMP" >> $LOGFILE
-		echo $(cat $TMPNFA) >> $LOGFILE
-		rm $TMPNFA
 		return 1
 	fi
 }
 
-# $1 - aconversions2 sequence
-function runTest {
+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_TIMEOUT=0
-	RES_SIGSEGV=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 FILE in `ls $TESTS_DIR/aconversion.test*`; do
-		AUTOMATON=$(cat $FILE)
-
-		runTest2 "$1" "$AUTOMATON"
-		TEST_EXITVALUE=$?
-
-		if [ $TEST_EXITVALUE == 0 ]; then
-			echo -n "."
-			RES_GOOD=$((RES_GOOD + 1))
-		elif [ $TEST_EXITVALUE == 1 ]; then
-			echo -n "x"
-			RES_FAIL=$((RES_FAIL + 1))
-		elif [ $TEST_EXITVALUE == 2 ]; then
-			echo -n "T"
-			RES_TIMEOUT=$((RES_TIMEOUT + 1))
-		elif [ $TEST_EXITVALUE == 3 ]; then
-			echo -n "F"
-			RES_SIGSEGV=$((RES_SIGSEGV + 1))
-		else
-			echo -n "?"
-		fi
+		runTest2 "$1" "$(cat $FILE)"
+		registerResult $?
 	done
 
 	echo -n " | "
@@ -124,37 +136,11 @@ function runTest {
 	# random tests
 	for i in $(seq 1 $TESTCASE_ITERATIONS );
 	do
-		RAND_AUTOMATON=$(generateNFA)
-		if [ $? -eq 139 ]; then
-			echo -n "F"
-			RES_SIGSEGV=$((RES_SIGSEGV + 1))
-			continue
-		fi
-
-		runTest2 "$1" "$RAND_AUTOMATON"
-		TEST_EXITVALUE=$?
+		runTest2 "$1" "$(generateNFA)"
+		registerResult $?
+   done
 
-		if [ $TEST_EXITVALUE == 0 ]; then
-			echo -n "."
-			RES_GOOD=$((RES_GOOD + 1))
-		elif [ $TEST_EXITVALUE == 1 ]; then
-			echo -n "x"
-			RES_FAIL=$((RES_FAIL + 1))
-		elif [ $TEST_EXITVALUE == 2 ]; then
-			echo -n "T"
-			RES_TIMEOUT=$((RES_TIMEOUT + 1))
-		elif [ $TEST_EXITVALUE == 3 ]; then
-			echo -n "F"
-			RES_SIGSEGV=$((RES_SIGSEGV + 1))
-		else
-			echo -n "?"
-		fi
-	done
-
-	# summary
-	echo -ne "\n\t"
-	echo "RES: GOOD:" $RES_GOOD ", BAD:" $RES_FAIL ", TIMEOUT:" $RES_TIMEOUT ", SIGSEGV:" $RES_SIGSEGV
-	echo ""
+   outputResults
 }
 
 # FA -> RG -> FA
-- 
GitLab