From 72805b10cc6a8ffb69a42d71154c875421ea20c1 Mon Sep 17 00:00:00 2001 From: Tomas Pecka <peckato1@fit.cvut.cz> Date: Mon, 18 Feb 2019 14:45:48 +0100 Subject: [PATCH] Tests: Remove bash tests --- .gitlab-ci.yml | 6 - all-cmake-template.sh | 18 -- bash_multithread.sh | 84 ------ examples2/rte/gen_rte1.py | 42 --- examples2/rte/gen_rte2.py | 24 -- examples2/rte/gen_rte3.py | 30 --- examples2/rte/gen_rte4.py | 32 --- examples2/rte/gen_rte5.py | 22 -- examples2/rte/gen_rte6.py | 42 --- examples2/rte/gen_rte7.py | 35 --- examples2/rte/gen_rte8.py | 35 --- examples2/rte/gen_rte9.py | 29 --- tests.aarbology.sh | 463 --------------------------------- tests.aconversion.sh | 216 --------------- tests.aconvert.sh | 145 ----------- tests.aderivation.aintegral.sh | 92 ------- tests.adeterminize.sh | 155 ----------- tests.anormalize.sh | 191 -------------- tests.astringology.sh | 269 ------------------- tests.examples.sh | 150 ----------- tests.glushkovrte.sh | 183 ------------- tests.glushkovrte_naive.sh | 181 ------------- tests.repeats.sh | 367 -------------------------- 23 files changed, 2811 deletions(-) delete mode 100755 bash_multithread.sh delete mode 100755 examples2/rte/gen_rte1.py delete mode 100755 examples2/rte/gen_rte2.py delete mode 100755 examples2/rte/gen_rte3.py delete mode 100755 examples2/rte/gen_rte4.py delete mode 100755 examples2/rte/gen_rte5.py delete mode 100755 examples2/rte/gen_rte6.py delete mode 100755 examples2/rte/gen_rte7.py delete mode 100755 examples2/rte/gen_rte8.py delete mode 100755 examples2/rte/gen_rte9.py delete mode 100755 tests.aarbology.sh delete mode 100755 tests.aconversion.sh delete mode 100755 tests.aconvert.sh delete mode 100755 tests.aderivation.aintegral.sh delete mode 100755 tests.adeterminize.sh delete mode 100755 tests.anormalize.sh delete mode 100755 tests.astringology.sh delete mode 100755 tests.examples.sh delete mode 100755 tests.glushkovrte.sh delete mode 100755 tests.glushkovrte_naive.sh delete mode 100755 tests.repeats.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e239a18f7c..3a335cafd1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -123,12 +123,6 @@ build:doc: script: - cd release - make CTEST_OUTPUT_ON_FAILURE=1 test - # temporary until make tests manages all tests - - mkdir bin - - cd bin - - find .. -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) -exec test -x {} \; -print | grep -v 'CMakeFiles' | while read line; do ln -s $line $(basename $line); done - - cd ../.. - - for test in $(ls tests.*.sh); do ./${test} release/bin $(grep -c processor /proc/cpuinfo) || exit 1; touch release/bin/log_tests.txt; cat release/bin/log_tests.txt; done .test:push: &test-push <<: *test diff --git a/all-cmake-template.sh b/all-cmake-template.sh index afb2754d47..b9ffa30111 100755 --- a/all-cmake-template.sh +++ b/all-cmake-template.sh @@ -34,22 +34,4 @@ function build () { make -j${THREADS} || exit 1 make test || exit 1 - - # todo: everything below should be handled by cmake's make test and make install - if [ ! -d bin ]; then - mkdir bin - fi - - rm bin/* - cd bin - find .. -executable -type f | grep -v 'CMakeFiles' | while read line; do ln -s $line $(basename $line); done - - cp ${DIRECTORY}/translateAddresses . - cp ${DIRECTORY}/xmlFormat . - - cd ${DIRECTORY} - - for test in $(ls tests.*.sh); do \ - ./${test} ${BUILD_DIR}/bin ${THREADS}; \ - done } diff --git a/bash_multithread.sh b/bash_multithread.sh deleted file mode 100755 index 6006b95b1c..0000000000 --- a/bash_multithread.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -# slightly modified implementation of sub-process limiter -# by paxdiablo. See http://stackoverflow.com/a/1685440 - -# bgxupdate - update active processes in a group. -# Works by transferring each process to new group -# if it is still active. -# in: bgxgrp - current group of processes. -# out: bgxgrp - new group of processes. -# out: bgxcount - number of processes in new group. - -bgxupdate() { - bgxoldgrp=${bgxgrp} - bgxgrp="" - ((bgxcount = 0)) - bgxjobs=" $(jobs -pr | tr '\n' ' ')" - for bgxpid in ${bgxoldgrp} ; do - echo "${bgxjobs}" | grep " ${bgxpid} " >/dev/null 2>&1 - if [[ $? -eq 0 ]] ; then - bgxgrp="${bgxgrp} ${bgxpid}" - ((bgxcount = bgxcount + 1)) - fi - done -} - -# bgxlimit - start a sub-process with a limit. -# Loops, calling bgxupdate until there is a free -# slot to run another sub-process. Then runs it -# an updates the process group. -# in: $1 - the limit on processes. -# in: $2+ - the command to run for new process. -# in: bgxgrp - the current group of processes. -# out: bgxgrp - new group of processes - -bgxlimit() { - bgxmax=$1 ; shift - bgxupdate - while [[ ${bgxcount} -ge ${bgxmax} ]] ; do - sleep 0.1 - bgxupdate - done - if [[ "$1" != "-" ]] ; then - "$@" & - bgxgrp="${bgxgrp} $!" - fi - # echo '[' ${bgxgrp} ']' -} - -# bgxwait - wait for sub-processes to finish -# Loops calling bgxupdate until there is something -# in a process group - -bgxwait() { - bgxupdate - while [[ ${bgxcount} -ne 0 ]] ; do - oldcount=${bgxcount} - while [[ ${oldcount} -eq ${bgxcount} ]] ; do - sleep 0.1 - bgxupdate - done - # echo '[' ${bgxgrp} ']' - done -} - -bgxtest() { - callback() { - id=$1 ; shift - echo start $id $(date | awk '{print $4}') "$BASHPID" - sleep ${id}0 - echo end $id $(date | awk '{print $4}') "$BASHPID" - } - - # Test program, create group and run 6 sleeps with - # limit of 3. - - bgxgrp="" - for i in 1 2 3 4 5 6 ; do - bgxlimit 3 callback ${i} - done - - # Wait until all others are finished. - bgxwait; -} diff --git a/examples2/rte/gen_rte1.py b/examples2/rte/gen_rte1.py deleted file mode 100755 index 6bad1a75cf..0000000000 --- a/examples2/rte/gen_rte1.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - -def SCont(depth): - if depth > MAXD or random.randint(0,1) == 0: - return - - - p('d 1 ') - p('a 2 ') - SCont(depth + 1) - if depth > MAXD or random.randint(0,1) == 0: - p('b 0 ') - else: - p('c 0 ') - - -def S(depth): - SCont(depth + 1) - - if depth > MAXD or random.randint(0,1) == 0: - p('b 0 ') - else: - p('c 0 ') - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte2.py b/examples2/rte/gen_rte2.py deleted file mode 100755 index ed239867b9..0000000000 --- a/examples2/rte/gen_rte2.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -if __name__ == '__main__': - p('RANKED_TREE ') - - p('a 2 ') - p('b 0 ') - p('b 0 ') diff --git a/examples2/rte/gen_rte3.py b/examples2/rte/gen_rte3.py deleted file mode 100755 index 66687753a4..0000000000 --- a/examples2/rte/gen_rte3.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def S(depth): - if depth > MAXD or random.randint(0,1) == 0: - p('b 0 ') - return - - p('a 2 ') - S(depth + 1) - S(depth + 1) - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte4.py b/examples2/rte/gen_rte4.py deleted file mode 100755 index 7b0140bb6a..0000000000 --- a/examples2/rte/gen_rte4.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def S(depth): - if depth > MAXD or random.randint(0,1) == 0: - p('a 2 ') - p('b 0 ') - p('b 0 ') - return - - p('a 2 ') - S(depth + 1) - S(depth + 1) - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte5.py b/examples2/rte/gen_rte5.py deleted file mode 100755 index 9e4ed0aba6..0000000000 --- a/examples2/rte/gen_rte5.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -if __name__ == '__main__': - p('RANKED_TREE ') - - p('a 0 ') diff --git a/examples2/rte/gen_rte6.py b/examples2/rte/gen_rte6.py deleted file mode 100755 index 61027b1d50..0000000000 --- a/examples2/rte/gen_rte6.py +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def SL(depth): - rand = random.randint(0,1) - if depth > MAXD or rand == 0: - p('b 0 ') - elif rand == 1: - S(depth + 1) - - -def SR(depth): - rand = random.randint(0,1) - if depth > MAXD or rand == 0: - p('c 0 ') - elif rand == 1: - S(depth + 1) - - -def S(depth): - p('a 2 ') - SL(depth + 1) - SR(depth + 1) - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte7.py b/examples2/rte/gen_rte7.py deleted file mode 100755 index 4561cafb3a..0000000000 --- a/examples2/rte/gen_rte7.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def SCont(depth): - if depth > MAXD or random.randint(0,2) == 0: - return - - p('d 1 ') - SCont(depth + 1) - - -def S(depth): - SCont(depth + 1) - p('a 2 ') - p('c 0 ') - p('b 0 ') - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte8.py b/examples2/rte/gen_rte8.py deleted file mode 100755 index 7dc7ae2a23..0000000000 --- a/examples2/rte/gen_rte8.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def S(depth): - if depth > MAXD or random.randint(0,1) == 0: - rand = random.randint(0,3) - - if rand == 0: p('b 0 ') - elif rand == 1: p('c 0 ') - elif rand == 2: p('d 0 ') - elif rand == 3: p('e 0 ') - return - - p('a 2 ') - S(depth + 1) - S(depth + 1) - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/examples2/rte/gen_rte9.py b/examples2/rte/gen_rte9.py deleted file mode 100755 index d198c2eac0..0000000000 --- a/examples2/rte/gen_rte9.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python3 -import random -import sys - -MAXD = 200 -MAXL = 1000 -L = 0 - -def p(c): - print(c, end='') - global L - L = L + 1 - - if L > MAXL: - L = 0 - print ("\n", end='') - - -def S(depth): - if depth > MAXD or random.randint(0,1) == 0: - p('b 0 ') - else: - p('a 2 ') - S(depth + 1) - S(depth + 1) - -if __name__ == '__main__': - p('RANKED_TREE ') - S(1) diff --git a/tests.aarbology.sh b/tests.aarbology.sh deleted file mode 100755 index 1a6387563c..0000000000 --- a/tests.aarbology.sh +++ /dev/null @@ -1,463 +0,0 @@ -#!/usr/bin/env bash - -source bash_multithread.sh - -# $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="`pwd`/examples2/tree" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= -MATCHES= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $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 generateNonlinearPatternSingle { - ./arand2 -t RNP --nodes $RAND_SIZE_PATTERN --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) --height $RAND_HEIGHT_PATTERN --single_nonlinear_variable 2>/dev/null -} - -function generateNonlinearPattern { - ./arand2 -t RNP --nodes $RAND_SIZE_PATTERN --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) --height $RAND_HEIGHT_PATTERN 2>/dev/null -} - -function generatePattern { - ./arand2 -t RP --nodes $RAND_SIZE_PATTERN --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) --height $RAND_HEIGHT_PATTERN 2>/dev/null -} - -function generateSubtree { - ./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 --rank 2 2>/dev/null -} - -# $1 = command to compute expected number of occurrences -# $2 = command to test -# $3 = subject -# $4 = pattern -function runTest2 { - OUT1=`bash -c "SUBJECT_FILE=\"$3\"; PATTERN_FILE=\"$4\"; $1"` - OUT2=`timeout $TESTCASE_TIMEOUT bash -c "SUBJECT_FILE=\"$3\"; PATTERN_FILE=\"$4\"; $2"` - RET=$? - if [ $RET == 0 ]; then # ok - OUT=`test $OUT1 -eq $OUT2` - fi - RET2=$? - - if [ $RET != 0 ] || [ $RET2 != 0 ]; then # fail - log "$2" $RET "$3" "$4" "$OUT1:$OUT2:$OUT" - fi - - rm $3 - rm $4 - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ] || [ $RET2 != 0 ]; then # fail - registerResult 1 - return 1 - else - echo -n "+$OUT2" >> $MATCHES - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN - MATCHES=$(mktemp) - echo -n "0" > $MATCHES -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN - rm $MATCHES -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - echo "" >> $MATCHES - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN), "MATCHES:" $(bc < $MATCHES) - echo "" -} - -# $1 - aconversions2 sequence -function runTestSubtree { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./aarbology2 -a exactSubtreeMatch -s \"\$SUBJECT_FILE\" -p \"\$PATTERN_FILE\" | ./astat2 -p size" - - # predefined tests first - for SUBJECT_FILE in `ls $TESTS_DIR/aarbology.test*.subject.xml`; do - PATTERN_FILE=${SUBJECT_FILE%.subject.xml}.subtree.xml - if [ -f $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generateSubtree) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# $1 - aconversions2 sequence -function runTestPattern { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./aarbology2 -a exactPatternMatch -s \"\$SUBJECT_FILE\" -p \"\$PATTERN_FILE\" | ./astat2 -p size" - - # 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 $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generatePattern) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# $1 - aconversions2 sequence -function runTestNonlinearPattern { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./aarbology2 -a exactPatternMatch -s \"\$SUBJECT_FILE\" -p \"\$PATTERN_FILE\" | ./astat2 -p size" - - # predefined tests first - for SUBJECT_FILE in `ls $TESTS_DIR/aarbology.test*.subject.xml`; do - PATTERN_FILE=${SUBJECT_FILE%.subject.xml}.nonlinear.pattern.xml - if [ -f $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generateNonlinearPattern) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# $1 - aconversions2 sequence -function runTestPatternEnds { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./aarbology2 -e -a exactPatternMatch -s <(./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <(./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - - # 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 $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generatePattern) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# $1 - aconversions2 sequence -function runTestNonlinearPatternEnds { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./aarbology2 -e -a exactPatternMatch -s <(./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <(./acast2 -t PrefixRankedNonlinearPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - - # predefined tests first - for SUBJECT_FILE in `ls $TESTS_DIR/aarbology.test*.subject.xml`; do - PATTERN_FILE=${SUBJECT_FILE%.subject.xml}.nonlinear.pattern.xml - if [ -f $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generateNonlinearPatternSingle) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - -runTestNonlinearPattern "Exact Nonlinear Pattern Matching Using Compressed Bit Vectors (PrefixRankedBar)" "./aarbology2 -a nonlinearCompressedBitParallelIndex -s <(./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q nonlinearCompressedBitParallelismPatterns -i - -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestNonlinearPattern "Exact Nonlinear Pattern Matching Using Full And Linear Index (PrefixRanked)" "./aarbology2 -a nonlinearFullAndLinearIndex -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q nonlinearFullAndLinearIndexPatterns -i - -p <( ./acast2 -t PrefixRankedNonlinearPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestNonlinearPattern "Exact Nonlinear Pattern Matching Using Full And Linear Index (PrefixRankedBar)" "./aarbology2 -a nonlinearFullAndLinearIndex -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q nonlinearFullAndLinearIndexPatterns -i - -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestPattern "Exact Pattern Matching Using Full And Linear Index (PrefixRankedBar)" "./aarbology2 -a fullAndLinearIndex -s <(./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q fullAndLinearIndexPatterns -i - -p <( ./acast2 -t PrefixRankedBarPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestPattern "Exact Pattern Matching Using Full And Linear Index (PrefixRanked)" "./aarbology2 -a fullAndLinearIndex -s <(./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q fullAndLinearIndexPatterns -i - -p <( ./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestPattern "Exact Pattern Matching Using Compressed Bit Vectors (PrefixRankedBar)" "./aarbology2 -a compressedBitParallelIndex -s <(./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q compressedBitParallelismPatterns -i - -p <( ./acast2 -t PrefixRankedBarPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestPatternEnds "Exact Pattern Matching Using Compressed Bit Vectors (PrefixRanked)" "./aarbology2 -a compressedBitParallelIndex -s <(./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) | ./aquery2 -q compressedBitParallelismPatterns -i - -p <( ./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" - -runTestPatternEnds "Exact Pattern Matching Automaton (PrefixRanked)" "./aarbology2 -a exactPatternMatchingAutomaton -p <(./acast2 -t PrefixRankedPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <( ./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\" ) ) ) | ./adeterminize2 | ./arun2 -t occurrences -a - -i <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" - -RAND_SIZE_SUBJECT=120 -runTestPatternEnds "Exact Tree Pattern Automaton (PrefixRanked)" "./aarbology2 -a exactTreePatternAutomaton -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -w <( ./aaccess2 --tree subtree_wildcard -o get -i \"\$PATTERN_FILE\" ) | ./adeterminize2 | ./arun2 -t result -i <(./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" - -RAND_SIZE_SUBJECT=80 -runTestNonlinearPatternEnds "Exact Nonlinear Tree Pattern Automaton (PrefixRanked)" "./aarbology2 -a exactNonlinearTreePatternAutomaton -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -w <( ./aaccess2 --tree subtree_wildcard -o get -i \"\$PATTERN_FILE\" ) -n <( ./aaccess2 --tree nonlinear_variables -o get -i \"\$PATTERN_FILE\" ) | ./adeterminize2 | ./arun2 -t result -i <(./acast2 -t PrefixRankedNonlinearPattern -i \"\$PATTERN_FILE\" | ./acast2 -t LinearString ) -f <(echo '<Set />') | ./aql2 -q 'execute < :pair_set #stdin | dataAccess::PairSetFirst - >#stdout' | ./astat2 -p size" - -runTestNonlinearPattern "Exact Nonlinear Tree Pattern Automaton (PrefixRankedBar)" "./aarbology2 -a exactNonlinearTreePatternAutomaton -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -w <( ./aaccess2 --tree subtree_wildcard -o get -i \"\$PATTERN_FILE\" ) -n <( ./aaccess2 --tree nonlinear_variables -o get -i \"\$PATTERN_FILE\" ) -b <( ./aaccess2 --tree variables_bar -o get -i <(./acast2 -t PrefixRankedBarNonlinearPattern -i \"\$PATTERN_FILE\" ) ) | ./adeterminize2 | ./arun2 -t result -i <(./acast2 -t PrefixRankedBarNonlinearPattern -i \"\$PATTERN_FILE\" | ./acast2 -t LinearString ) -f <(echo '<Set />') | ./aql2 -q 'execute < :pair_set #stdin | dataAccess::PairSetFirst - >#stdout' | ./astat2 -p size" - -RAND_SIZE_SUBJECT=1000 -runTestSubtree "Exact Boyer Moore Horspool (Subtree PrefixRankedBar)" "./aarbology2 -a boyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarTree -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestSubtree "Exact Subtree Automaton (Tree)" "./arun2 -t occurrences -a <(./aarbology2 -a exactSubtreeMatchingAutomaton -p \"\$PATTERN_FILE\" | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p size" -runTestSubtree "Exact Minimized Subtree Automaton (Tree)" "./arun2 -t occurrences -a <(./aarbology2 -a exactSubtreeMatchingAutomaton -p \"\$PATTERN_FILE\" | ./adeterminize2 | ./atrim2 -r -u | ./aminimize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p size" - -runTestPattern "Exact Boyer Moore Horspool (Pattern PrefixRankedBar)" "./aarbology2 -a boyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Pattern Match (NonlinearPattern PrefixRankedBar)" "./aarbology2 -a exactPatternMatch -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Boyer Moore Horspool (NonlinearPattern PrefixRankedBar)" "./aarbology2 -a boyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Reversed Boyer Moore Horspool (Pattern PrefixRankedBar)" "./aarbology2 -a reversedBoyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Reversed Boyer Moore Horspool (Pattern PrefixRanked)" "./aarbology2 -a reversedBoyerMooreHorspool -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Reversed Boyer Moore Horspool (NonlinearPattern PrefixRankedBar)" "./aarbology2 -a reversedBoyerMooreHorspool -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Reversed Boyer Moore Horspool (NonlinearPattern PrefixRanked)" "./aarbology2 -a reversedBoyerMooreHorspool -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Quick Search (Pattern PrefixRankedBar)" "./aarbology2 -a quickSearch -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Quick Search (NonlinearPattern PrefixRankedBar)" "./aarbology2 -a quickSearch -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Reversed Quick Search (Pattern PrefixRankedBar)" "./aarbology2 -a reversedQuickSearch -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Reversed Quick Search (NonlinearPattern PrefixRankedBar)" "./aarbology2 -a reversedQuickSearch -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Reversed Quick Search (Pattern PrefixRanked)" "./aarbology2 -a reversedQuickSearch -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestNonlinearPattern "Exact Reversed Quick Search (NonlinearPattern PrefixRanked)" "./aarbology2 -a reversedQuickSearch -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedNonlinearPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Knuth Morris Pratt (Pattern PrefixRankedBar)" "./aarbology2 -a knuthMorrisPratt -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" -runTestPattern "Exact Knuth Morris Pratt (Pattern PrefixRanked)" "./aarbology2 -a knuthMorrisPratt -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedPattern -i \"\$PATTERN_FILE\" ) | ./astat2 -p size" -runTestPattern "Exact Dead Zone Using Bad Character Shift And Border Array (Pattern PrefixRanked)" "./aarbology2 -a deadZoneUsingBadCharacterShiftAndBorderArray -s <( ./acast2 -t PrefixRankedTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" -runTestPattern "Exact Dead Zone Using Bad Character Shift And Border Array (Pattern PrefixRankedBar)" "./aarbology2 -a deadZoneUsingBadCharacterShiftAndBorderArray -s <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" ) -p <( ./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\"))) | ./astat2 -p size" - -runTestPattern "Exact Pattern Matching Automaton (Pattern Tree)" "./arun2 -t occurrences -a <(./aarbology2 -a exactPatternMatchingAutomaton -p <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\")) | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p size" -runTestPattern "Exact Pattern Matching Automaton (PrefixRankedBar)" "./aarbology2 -a exactPatternMatchingAutomaton -p <(./acast2 -t PrefixRankedBarPattern -i <(./aaccess2 --tree alphabet -o add -i \"\$PATTERN_FILE\" -c <( ./aaccess2 --tree alphabet -o get -i \"\$SUBJECT_FILE\" ) ) ) | ./adeterminize2 | ./arun2 -t occurrences -a - -i <( ./acast2 -t PrefixRankedBarTree -i \"\$SUBJECT_FILE\" | ./acast2 -t LinearString ) | ./astat2 -p size" - - diff --git a/tests.aconversion.sh b/tests.aconversion.sh deleted file mode 100755 index 29a722962f..0000000000 --- a/tests.aconversion.sh +++ /dev/null @@ -1,216 +0,0 @@ -#!/usr/bin/env bash - -source bash_multithread.sh - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_ITERATIONS=100 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -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= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $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 - cat "$3" >> $LOGFILE - echo "command out:" >> $LOGFILE - echo "$4" >> $LOGFILE -} - -function generateNFA { - ./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 !! -# $2 = automaton -function runTest2 { - MDFA="./aql2 -q 'execute automaton::simplify::efficient::EpsilonRemoverIncoming <#stdin | automaton::determinize::Determinize - | automaton::simplify::Trim - | automaton::simplify::Minimize - | automaton::simplify::Normalize - >#stdout'" - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "./acompare2 <(cat $2 | $1 | $MDFA ) <(cat $2 | $MDFA)"` - RET=$? - - if [ $RET != 0 ]; then # fail - log "$1" $RET "$2" "$OUT" - fi - - rm $2 - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - # predefined tests first - for FILE in `ls $TESTS_DIR/aconversion.test*`; do - FILE_COPY=$(mktemp) - - cat $FILE > $FILE_COPY - - bgxlimit ${JOBS} runTest2 "$1" "$FILE_COPY" - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - NFA_FILE=$(mktemp) - - cat <(generateNFA) > $NFA_FILE - - bgxlimit ${JOBS} runTest2 "$1" "$NFA_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# 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" - -# FA -> RRG -> RE -> 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" diff --git a/tests.aconvert.sh b/tests.aconvert.sh deleted file mode 100755 index 704b4ae99a..0000000000 --- a/tests.aconvert.sh +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -EXECUTABLES="aconvert2" -TESTS_DIR="`pwd`/examples2" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $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 "input automaton:" >> $LOGFILE - cat "$3" >> $LOGFILE - echo "command out:" >> $LOGFILE - echo "$4" >> $LOGFILE -} - -# $1 = command for conversion. Output of such command must be (eps-)NFA !! -# $2 = automaton -function runTest2 { - OUT=`timeout $TESTCASE_TIMEOUT bash -c "cat $2 | ./aconvert2 --$1_from_string "` - RET=$? - - if [ $RET == 0 ]; then # ok - return 0 - fi - - log "$1" $RET "$2" "$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 "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 \(./aconvert2 --$1_from_string\) - echo -ne "\t" - - initResults - - # predefined tests first - for FILE in `ls $TESTS_DIR/$1/*.txt`; do - runTest2 "$1" "$FILE" - registerResult $? - done - - outputResults - clearResults -} - -runTest "automaton" -runTest "grammar" diff --git a/tests.aderivation.aintegral.sh b/tests.aderivation.aintegral.sh deleted file mode 100755 index 190e4b8c55..0000000000 --- a/tests.aderivation.aintegral.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -set -o pipefail - -EXECUTABLES="aepsilon2 atrim2 adeterminize2 aminimize2 anormalize2 acompare2 aderivation2 aintegral2 aconversions2" -TESTS_DIR="`pwd`/examples2/regexp" - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ - -# ---------------------------- - -function regexpToMDFA { - echo "$1" | ./aconversions2 -t fa | ./aepsilon2 | ./atrim2 | ./adeterminize2 | ./aminimize2 | ./anormalize2 --labels automaton -} - -function compareRegexp { - # relies on ret code by adiff.automaton - ./acompare2 <(regexpToMDFA "$1") <(regexpToMDFA "$2") > /dev/null - return $? -} - - -# $1 - input regexp -# $2 - output regexp -function runTest { - compareRegexp "$1" "$2" - - TEST_EXITVALUE=$? - - if [ $TEST_EXITVALUE == 0 ]; then - echo -n "." - elif [ $TEST_EXITVALUE == 1 ]; then - echo -n "x" - elif [ $TEST_EXITVALUE == 2 ]; then - echo -n "T" - elif [ $TEST_EXITVALUE == 3 ]; then - echo -n "F" - else - echo -n "?" - fi - -} - -function runTestD { - FILE_REGEXP_ORIG="$1" - FILE_REGEXP_RESULT="$2" - shift 2 - - REGEXP_DERIVATIVE=$(./aconvert2 --string_from_string <<< "$1" | ./aderivation2 -r $TESTS_DIR/$FILE_REGEXP_ORIG -s - ) - REGEXP_RESULT=$(cat $TESTS_DIR/$FILE_REGEXP_RESULT) - runTest "$REGEXP_DERIVATIVE" "$REGEXP_RESULT" -} - -function runTestI { - FILE_REGEXP_ORIG="$1" - FILE_REGEXP_RESULT="$2" - shift 2 - - REGEXP_INTEGRAL=$(./aconvert2 --string_from_string <<< "$1" | ./aintegral2 -r $TESTS_DIR/$FILE_REGEXP_ORIG -s - ) - REGEXP_RESULT=$(cat $TESTS_DIR/$FILE_REGEXP_RESULT) - - runTest "$REGEXP_INTEGRAL" "$REGEXP_RESULT" -} - - -# derivatives -echo "Derivatives" -runTestD "unbounded.oppa.4.13.xml" "unbounded.oppa.4.13.d0.xml" "\"0\"" -runTestD "unbounded.oppa.4.13.xml" "unbounded.oppa.4.13.d00.xml" "\"0 0\"" -runTestD "unbounded.oppa.4.14.xml" "unbounded.oppa.4.14.d1.xml" "\"1\"" -runTestD "unbounded.oppa.4.14.xml" "unbounded.oppa.4.14.d10.xml" "\"1 0\"" -runTestD "unbounded.oppa.4.15.xml" "unbounded.oppa.4.15.d100.xml" "\"1 0 0\"" - -# integrals -echo "" -echo "Integrals" -runTestI "unbounded.oppa.4.16.xml" "unbounded.oppa.4.16.i1.xml" "\"1\"" -runTestI "Melichar2-94.xml" "Melichar2-94.i0.xml" "\"0\"" -runTestI "Melichar2-94.xml" "Melichar2-94.i1.xml" "\"1\"" - -echo "" diff --git a/tests.adeterminize.sh b/tests.adeterminize.sh deleted file mode 100755 index 24542df3aa..0000000000 --- a/tests.adeterminize.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -EXECUTABLES="aepsilon2 atrim2 adeterminize2 aminimize2 anormalize2 acompare2" -TESTS_DIR="`pwd`/examples2/automaton" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $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 "input automaton:" >> $LOGFILE - cat "$3" >> $LOGFILE - echo "command out:" >> $LOGFILE - echo "$4" >> $LOGFILE -} - -# $1 = what is beeing done (name) -# $2 = command for conversion. Output of such command must be (eps-)NFA !! -# $3 = automaton -# $4 = automaton to compare with -function runTest2 { - OUT=`timeout $TESTCASE_TIMEOUT bash -c "./acompare2 <(cat $3 | $2 ) $4"` - RET=$? - - if [ $RET == 0 ]; then # ok - return 0 - fi - - log "$1" $RET "$3" "$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 "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 \($2\) - echo -ne "\t" - - initResults - - # predefined tests first - for FILE in `ls $TESTS_DIR/$1*.xml | grep -v DET`; do - DET_FILE=${FILE%.xml}.DET.xml - if [ -f ${DET_FILE} ]; then - runTest2 $1 "$2" "$FILE" "$DET_FILE" - registerResult $? - fi - done - - outputResults - clearResults -} - -runTest "NFSM" "./adeterminize2 | ./atrim2" -runTest "ENFSM" "./aepsilon2 | ./adeterminize2" -runTest "NIDPDA" "./adeterminize2" -runTest "NPDA" "./adeterminize2 | ./anormalize2 --labels automaton" -runTest "NVPA" "./adeterminize2" -runTest "RHDPDA" "./adeterminize2" -runTest "NFTA" "./adeterminize2" diff --git a/tests.anormalize.sh b/tests.anormalize.sh deleted file mode 100755 index 47e327f742..0000000000 --- a/tests.anormalize.sh +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env bash - -source bash_multithread.sh - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_ITERATIONS=100 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -RAND_NONTERMINALS=2 -RAND_DENSITY="50" -RAND_TERMINALS=4 -STRING_LENGHTS=6 - -EXECUTABLES="arand2 atrim2 anormalize2 agenerate2 aepsilon2" -TESTS_DIR="`pwd`/examples2/grammar" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $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 - cat "$3" >> $LOGFILE - echo "command out:" >> $LOGFILE - echo "$4" >> $LOGFILE -} - -function generateCFG { - ./arand2 -t CFG --density $RAND_DENSITY --nonterminals $(( $RANDOM % $RAND_NONTERMINALS + 1 )) --terminals $(( $RANDOM % $RAND_TERMINALS + 1 )) 2>/dev/null | ./aepsilon2 | ./aql2 -q "execute grammar::simplify::SimpleRulesRemover < #stdin > #stdout" -} - -# $1 = command for conversion. Output of such command must be a grammar !! -# $2 = original grammar -function runTest2 { - GENERATED_STRINGS="./agenerate2 -t upTo --upto $STRING_LENGHTS | ./aecho2 -n" - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff <(cat $2 | $1 | $GENERATED_STRINGS ) <(cat $2 | $GENERATED_STRINGS)"` - RET=$? - - if [ $RET != 0 ]; then # fail - log "$1" $RET "$2" "$OUT" - fi - - rm $2 - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - # predefined tests first - for FILE in `ls $TESTS_DIR/anormalization.test*`; do - FILE_COPY=$(mktemp) - - cat $FILE > $FILE_COPY - - bgxlimit ${JOBS} runTest2 "$1" "$FILE_COPY" - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - CFG_FILE=$(mktemp) - - cat <(generateCFG) > $CFG_FILE - - bgxlimit ${JOBS} runTest2 "$1" "$CFG_FILE" - done - - bgxwait - - outputResults - clearResults -} - -# Chomsky normal form and Greibach normal form -runTest "./anormalize2 -f GNF" -runTest "./anormalize2 -f CNF" diff --git a/tests.astringology.sh b/tests.astringology.sh deleted file mode 100755 index 741826059a..0000000000 --- a/tests.astringology.sh +++ /dev/null @@ -1,269 +0,0 @@ -#!/usr/bin/env bash - -source bash_multithread.sh - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_ITERATIONS=100 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -RAND_SIZE_SUBJECT=100 -RAND_SIZE_PATTERN=4 -RAND_ALPHABET=4 - -EXECUTABLES="arand2 atrim2 adeterminize2 anormalize2 " -TESTS_DIR="`pwd`/examples2/string" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= -MATCHES= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $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 ST --length $RAND_SIZE_PATTERN --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) 2>/dev/null | ./anormalize2 -a string -} - -function generateSubject { - ./arand2 -t ST --length $RAND_SIZE_SUBJECT --terminals $(( $RANDOM % $RAND_ALPHABET + 1 )) 2>/dev/null | ./anormalize2 -a string -} - -# $1 = command to compute expected number of occurrences -# $2 = command to test -# $3 = subject -# $4 = pattern -function runTest2 { - OUT1=`bash -c "SUBJECT_FILE=\"$3\"; PATTERN_FILE=\"$4\"; $1"` - OUT2=`timeout $TESTCASE_TIMEOUT bash -c "SUBJECT_FILE=\"$3\"; PATTERN_FILE=\"$4\"; $2"` - RET=$? - if [ $RET == 0 ]; then # ok - OUT=`test $OUT1 -eq $OUT2` - fi - RET2=$? - - if [ $RET != 0 ] || [ $RET2 != 0 ]; then # fail - log "$2" $RET "$3" "$4" "$OUT1:$OUT2:$OUT" - fi - - rm $3 - rm $4 - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ] || [ $RET2 != 0 ]; then # fail - registerResult 1 - return 1 - else - echo -n "+$OUT2" >> $MATCHES - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN - MATCHES=$(mktemp) - echo -n "0" > $MATCHES -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN - rm $MATCHES -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - echo "" >> $MATCHES - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN), "MATCHES:" $(bc < $MATCHES) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - Occs="./astringology2 -a exactFactorMatch -s \"\$SUBJECT_FILE\" -p \"\$PATTERN_FILE\" | ./astat2 -p size" - - # predefined tests first - for SUBJECT_FILE in `ls $TESTS_DIR/astringology.test*.subject.xml`; do - PATTERN_FILE=${SUBJECT_FILE%.subject.xml}.pattern.xml - if [ -f $PATTERN_FILE ]; then - SUBJECT_FILE_COPY=$(mktemp) - PATTERN_FILE_COPY=$(mktemp) - - cat $SUBJECT_FILE > $SUBJECT_FILE_COPY - cat $PATTERN_FILE > $PATTERN_FILE_COPY - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE_COPY" "$PATTERN_FILE_COPY" - fi - done - - bgxwait - - echo -n " | " - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generatePattern) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$Occs" "$2" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - - -# $1 - aconversions2 sequence -# $2 - first tested entity -# $3 - second tested entity -function runTestAgainst { - echo $1 - echo -ne "\t" - - initResults - bgxgrp="" - - # random tests - for i in $(seq 1 $TESTCASE_ITERATIONS ); - do - SUBJECT_FILE=$(mktemp) - PATTERN_FILE=$(mktemp) - - cat <(generateSubject) > $SUBJECT_FILE - cat <(generatePattern) > $PATTERN_FILE - - bgxlimit ${JOBS} runTest2 "$2" "$3" "$SUBJECT_FILE" "$PATTERN_FILE" - done - - bgxwait - - outputResults - clearResults -} - - -runTest "DAWG Factors" "./astringology2 -a suffixAutomaton -s \"\$SUBJECT_FILE\" | ./aquery2 -q suffixAutomatonFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "BNDM Matcher" "./astringology2 -a bndmMatcher -p \"\$PATTERN_FILE\" | ./astringology2 -a bndmOccurrences -p - -s \"\$SUBJECT_FILE\" | ./astat2 -p size" -runTest "Exact Boyer Moore" "./astringology2 -a boyerMoore -s \"\$SUBJECT_FILE\" -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./astat2 -p size" -runTest "Compressed Bit Parallelism Factors" "./astringology2 -a compressedBitParallelIndex -s \"\$SUBJECT_FILE\" | ./aquery2 -q compressedBitParallelismFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "Bit Parallelism Factors" "./astringology2 -a bitParallelIndex -s \"\$SUBJECT_FILE\" | ./aquery2 -q bitParallelismFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "Position Heap Factors" "./astringology2 -a positionHeap -s \"\$SUBJECT_FILE\" | ./aquery2 -q positionHeapFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "Suffix Array Factors" "./astringology2 -a suffixArray -s \"\$SUBJECT_FILE\" | ./aquery2 -q suffixArrayFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "Suffix Trie Factors" "./astringology2 -a suffixTrie -s \"\$SUBJECT_FILE\" | ./aquery2 -q suffixTrieFactors -p \"\$PATTERN_FILE\" | ./astat2 -p size" -runTest "Exact Boyer Moore Horspool" "./astringology2 -a boyerMooreHorspool -s \"\$SUBJECT_FILE\" -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./astat2 -p size" -runTest "Exact Reversed Boyer Moore Horspool" "./astringology2 -a reversedBoyerMooreHorspool -s \"\$SUBJECT_FILE\" -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./astat2 -p size" -runTest "Quick Search" "./astringology2 -a quickSearch -s \"\$SUBJECT_FILE\" -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./astat2 -p size" -runTest "Exact Matching Automaton" "./arun2 -t occurrences -a <(./astringology2 -a exactMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./adeterminize2) -i \"\$SUBJECT_FILE\" | ./astat2 -p size" -runTest "Exact Dead Zone Using Bad Character Shift" "./astringology2 -a deadZoneUsingBadCharacterShift -s \"\$SUBJECT_FILE\" -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) | ./astat2 -p size" - -runTestAgainst "Hamming automaton vs. dynamic programing" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a hammingMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a hammingMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Hamming automaton vs. bit paralelism" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a hammingMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a hammingMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Hamming dynamic programming vs. bit paralelism" "./astringology2 -a hammingMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" "./astringology2 -a hammingMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" - -runTestAgainst "Levenshtein automaton vs. dynamic programing" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a levenshteinMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./aepsilon2 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a levenshteinMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Levenshtein automaton vs. bit paralelism" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a levenshteinMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./aepsilon2 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a levenshteinMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Levenshtein dynamic programming vs. bit paralelism" "./astringology2 -a levenshteinMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" "./astringology2 -a levenshteinMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" - -runTestAgainst "Generalized Levenshtein automaton vs. dynamic programing" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a generalizedLevenshteinMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./aepsilon2 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a generalizedLevenshteinMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Generalized Levenshtein automaton vs. bit paralelism" "./arun2 -t occurrences -i \"\$SUBJECT_FILE\" -a <(./astringology2 -a generalizedLevenshteinMatchingAutomaton -p <(./aaccess2 --string alphabet -o add -i \"\$PATTERN_FILE\" -c <(./aaccess2 --string alphabet -o get -i \"\$SUBJECT_FILE\")) -d 3 | ./aepsilon2 | ./adeterminize2) | ./astat2 -p size" "./astringology2 -a generalizedLevenshteinMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" -runTestAgainst "Generalized Levenshtein dynamic programming vs. bit paralelism" "./astringology2 -a generalizedLevenshteinMatchDynamicProgramming -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" "./astringology2 -a generalizedLevenshteinMatchBitParalelism -p \"\$PATTERN_FILE\" -s \"\$SUBJECT_FILE\" -d 3 | ./astat2 -p size" diff --git a/tests.examples.sh b/tests.examples.sh deleted file mode 100755 index f2cd662900..0000000000 --- a/tests.examples.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -EXECUTABLES="aecho2" -TESTS_DIR="`pwd`/examples2" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $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 "input automaton:" >> $LOGFILE - cat "$3" >> $LOGFILE - echo "command out:" >> $LOGFILE - echo "$4" >> $LOGFILE -} - -# $1 = command for conversion. Output of such command must be (eps-)NFA !! -# $2 = automaton -function runTest2 { - OUT=`timeout $TESTCASE_TIMEOUT bash -c "cat $2 | ./aecho2 "` - RET=$? - - if [ $RET == 0 ]; then # ok - return 0 - fi - - log "$1" $RET "$2" "$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 "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -# $1 - aconversions2 sequence -function runTest { - echo $1 \(./aecho2\) - echo -ne "\t" - - initResults - - # predefined tests first - for FILE in `ls $TESTS_DIR/$1/*.xml`; do - runTest2 "$1" "$FILE" - registerResult $? - done - - outputResults - clearResults -} - -runTest "automaton" -runTest "grammar" -runTest "regexp" -runTest "string" -runTest "tree" -runTest "rte" - diff --git a/tests.glushkovrte.sh b/tests.glushkovrte.sh deleted file mode 100755 index 933cabdb76..0000000000 --- a/tests.glushkovrte.sh +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_ITERATIONS=30 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -EXECUTABLES="arun2 adeterminize2 aconversions2" -TESTS_DIR="`pwd`/examples2/rte" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $1 = str -# $2 = automaton -# $3 = rte -function log { - echo "----------------------------------------------------------" >> $LOGFILE - echo "str: " >> $LOGFILE - cat $1 >> $LOGFILE - echo "aut: " >> $LOGFILE - cat $2 >> $LOGFILE - echo "rte: " >> $LOGFILE - cat $3 >> $LOGFILE - echo "out: " >> $LOGFILE - echo $4 >> $LOGFILE -} - -# $1 = genfile -# $2 = automaton -# $3 = rte -function runAcceptTest { - PATTERN=$(mktemp) - FILE=$(mktemp) - echo '"#$"' > $FILE - OUT=`timeout $TESTCASE_TIMEOUT bash -c "./arun2 -i <($1 | tee $PATTERN | ./aconvert2 --tree_from_string | ./aql2 -q 'execute string::StringConcatenate ( PostfixRankedTree ) <#stdin < [string] :string::String $FILE >#stdout ') -a $2"` - RET=$? - if [ $RET == 0 ]; then # ok - echo $OUT | grep -q "<Bool>true</Bool>" - if [ $? != 0 ]; then - RET=1 - fi - fi - - if [ $RET != 0 ]; then # fail - log "$PATTERN" "$2" "$3" "$OUT" - echo -n "" - fi - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -function run { - initResults - - # predefined tests first - TESTS="rte1 rte2 rte3 rte4 rte5 rte6 rte7 rte8 rte9" - for RTE in $TESTS; do - echo -n "$RTE: " - - RTE_FILE="$TESTS_DIR/$RTE.xml" - GEN_FILE="$TESTS_DIR/gen_$RTE.py" - AUTOMATON_FILE=$(mktemp) - - #echo $RTE_FILE - #echo $GEN_FILE - #echo $AUTOMATON_FILE - - ./aconversions2 -t pda -a glushkovrte -i $RTE_FILE 2>/dev/null | ./adeterminize2 > $AUTOMATON_FILE - - for i in `seq 1 $TESTCASE_ITERATIONS`; do - runAcceptTest $GEN_FILE $AUTOMATON_FILE $RTE_FILE - done - - echo "" - done - - # random tests - # TODO - - wait - - outputResults - clearResults -} - -run diff --git a/tests.glushkovrte_naive.sh b/tests.glushkovrte_naive.sh deleted file mode 100755 index 7d7f358d86..0000000000 --- a/tests.glushkovrte_naive.sh +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -# SETTINGS -TESTCASE_ITERATIONS=30 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -EXECUTABLES="arun2 adeterminize2 aconversions2" -TESTS_DIR="`pwd`/examples2/rte" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $1 = str -# $2 = automaton -# $3 = rte -function log { - echo "----------------------------------------------------------" >> $LOGFILE - echo "str: " >> $LOGFILE - cat $1 >> $LOGFILE - echo "aut: " >> $LOGFILE - cat $2 >> $LOGFILE - echo "rte: " >> $LOGFILE - cat $3 >> $LOGFILE -} - -# $1 = genfile -# $2 = automaton -# $3 = rte -function runAcceptTest { - PATTERN=$(mktemp) - FILE=$(mktemp) - echo '"#$"' > $FILE - OUT=`timeout $TESTCASE_TIMEOUT bash -c "./arun2 -i <($1 | tee $PATTERN | ./aconvert2 --tree_from_string | ./aql2 -q 'execute string::StringConcatenate ( PostfixRankedTree ) <#stdin < [string] :string::String $FILE >#stdout ') -a $2"` - RET=$? - if [ $RET == 0 ]; then # ok - echo $OUT | grep -q "<Bool>true</Bool>" - if [ $? != 0 ]; then - RET=1 - fi - fi - - if [ $RET != 0 ]; then # fail - log "$PATTERN" "$2" "$3" - echo -n "" - fi - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -function run { - initResults - - # predefined tests first - TESTS="rte1 rte2 rte3 rte4 rte5 rte6 rte7 rte8 rte9" - for RTE in $TESTS; do - echo -n "$RTE: " - - RTE_FILE="$TESTS_DIR/$RTE.xml" - GEN_FILE="$TESTS_DIR/gen_$RTE.py" - AUTOMATON_FILE=$(mktemp) - - #echo $RTE_FILE - #echo $GEN_FILE - #echo $AUTOMATON_FILE - - ./aconversions2 -t pda -a glushkovrtenaive -i $RTE_FILE 2>/dev/null | ./adeterminize2 > $AUTOMATON_FILE - - for i in `seq 1 $TESTCASE_ITERATIONS`; do - runAcceptTest $GEN_FILE $AUTOMATON_FILE $RTE_FILE - done - - echo "" - done - - # random tests - # TODO - - wait - - outputResults - clearResults -} - -run diff --git a/tests.repeats.sh b/tests.repeats.sh deleted file mode 100755 index 2702a42a56..0000000000 --- a/tests.repeats.sh +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env bash - -# $1 test dir suffix (debug / release) - -source bash_multithread.sh - -# ALGORITHM SETTINGS -TESTCASE_ITERATIONS=30 -TESTCASE_TIMEOUT=10 -LOGFILE="log_tests.txt" - -# RANDOM TREE SETTINGS (./arand2 parameters) -# BEWARE, NOT ALL VALUES MAY WORK TOGETHER -NODES=100 -HEIGHT=15 -ALPHABET_SIZE=10 - -EXECUTABLES="aarbology2 acast2 tniceprint arand2 " -TESTS_DIR="`pwd`/examples2/tree" - -RES_GOOD= -RES_FAIL= -RES_TIME= -RES_SEGV= -RES_UNKN= - - -# ---------------------------- - -for FILE in $EXECUTABLES; do - if [ ! -f $1/$FILE ]; then - echo "Executable $FILE is required for testing. Make sure it is in $1 folder." - exit 1 - fi -done - -cd $1/ -rm -f $LOGFILE - -JOBS=$2 -if [ -z "$JOBS" ]; then - JOBS=1 -fi - -# ---------------------------- - -# $1 = file path -# $2 = return code -# $3 = diff out -# $4 = RankedTree xml -# $5 = Naive output -# $6 = Advanced output -function log { - echo "==========================================================" >> $LOGFILE - echo "file: " $1 >> $LOGFILE - echo "ret: " $2 >> $LOGFILE - echo "problematic tree:" >> $LOGFILE - cat $4 >> $LOGFILE - ONE=$(mktemp) - TWO=$(mktemp) - echo "Naive : " >> $ONE - echo "Yours : " >> $TWO - cat $5 | ./tniceprint >> $ONE - cat $6 | ./tniceprint >> $TWO - paste $ONE $TWO | pr -t -e$(awk 'n<length {n=length} END {print n+1}' $ONE) >> $LOGFILE - rm $ONE $TWO -} - -# $1 = file path -# $2 = return code -# $3 = diff out -# $4 = RankedTree -# $5 = RankedTree -> Postfix -> RankedTree -function log2 { - echo "==========================================================" >> $LOGFILE - echo "file: " $1 >> $LOGFILE - echo "ret: " $2 >> $LOGFILE - ONE=$(mktemp) - TWO=$(mktemp) - echo "Simple : " >> $ONE - echo "After conversions : " >> $TWO - cat $4 >> $ONE - cat $5 >> $TWO - paste $ONE $TWO | pr -t -e$(awk 'n<length {n=length} END {print n+1}' $ONE) >> $LOGFILE - rm $ONE $TWO -} - -# $1 = TREE_FILE -function runPostfix2RankedAlgorithmTest { - #compares RankedTree to RankedTree -> PostfixRankedTree -> RankedTree - - RANKED2POSTFIX2RANKED=$(mktemp) - RANKED=$(mktemp) - - ./acast2 -t RankedTree -i $1 | ./tniceprint > $RANKED - ./acast2 -t RankedTree -i $1 | ./acast2 -t PostfixRankedTree | ./acast2 -t RankedTree | ./tniceprint > $RANKED2POSTFIX2RANKED - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff $RANKED $RANKED2POSTFIX2RANKED"` - RET=$? - - if [ $RET != 0 ]; then # fail - log2 "$1" $RET "$OUT" "$RANKED" "$RANKED2POSTFIX2RANKED" - fi - - rm $1 $RANKED2POSTFIX2RANKED $RANKED - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - - -function runNaivePostfixRepeatsTest { - - NAIVE_OUTPUT=$(mktemp) - ADVANCED_OUTPUT=$(mktemp) - - ./aarbology2 -s $1 -a exactSubtreeRepeatsNaive | ./aarbology2 -a normalizeTreeLabels > $NAIVE_OUTPUT - ./acast2 -t PostfixRankedTree -i $1 | ./aarbology2 -a exactSubtreeRepeatsNaive | ./acast2 -t RankedTree | ./aarbology2 -a normalizeTreeLabels > $ADVANCED_OUTPUT - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff $NAIVE_OUTPUT $ADVANCED_OUTPUT"` - RET=$? - - if [ $RET != 0 ]; then # fail - log "$1" $RET "$OUT" "$1" "$NAIVE_OUTPUT" "$ADVANCED_OUTPUT" - fi - - rm $1 $NAIVE_OUTPUT $ADVANCED_OUTPUT - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -# $1 = TREE_FILE -function runRepeatsAlgorithmTest { - - NAIVE_OUTPUT=$(mktemp) - ADVANCED_OUTPUT=$(mktemp) - ARBOLOGY_OUTPUT=$(mktemp) - - ./aarbology2 -s $1 -a exactSubtreeRepeatsNaive | ./aarbology2 -a normalizeTreeLabels > $NAIVE_OUTPUT - ./acast2 -t PostfixRankedTree -i $1 | ./aarbology2 -a exactSubtreeRepeats | ./acast2 -t RankedTree | ./aarbology2 -a normalizeTreeLabels > $ADVANCED_OUTPUT - ./acast2 -t PrefixRankedTree -i $1 | ./aarbology2 -a exactSubtreeRepeatsFromSubtreeAutomaton | ./acast2 -t RankedTree | ./aarbology2 -a normalizeTreeLabels > $ARBOLOGY_OUTPUT - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff $NAIVE_OUTPUT $ADVANCED_OUTPUT"` - RET=$? - - if [ $RET != 0 ]; then # fail - log "$1" $RET "$OUT" "$1" "$NAIVE_OUTPUT" "$ADVANCED_OUTPUT" - fi - - OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff $NAIVE_OUTPUT $ARBOLOGY_OUTPUT"` - RET=$? - - if [ $RET != 0 ]; then # fail - log "$1" $RET "$OUT" "$1" "$NAIVE_OUTPUT" "$ARBOLOGY_OUTPUT" - fi - - rm $1 $NAIVE_OUTPUT $ADVANCED_OUTPUT $ARBOLOGY_OUTPUT - - if [ $RET == 124 ]; then # timeout - registerResult 2 - return 2 - elif [ $RET -ge 124 ]; then #segv - registerResult 3 - return 3 - elif [ $RET != 0 ]; then # fail - registerResult 1 - return 1 - else - registerResult 0 - return 0 - fi -} - -function registerResult { - case $1 in - 0) - echo -n "." - echo -n "+1" >> $RES_GOOD - ;; - 1) - echo -n "x" - echo -n "+1" >> $RES_FAIL - ;; - 2) - echo -n "T" - echo -n "+1" >> $RES_TIME - ;; - 3) - echo -n "E" - echo -n "+1" >> $RES_SEGV - ;; - *) - echo -n "?" - echo -n "+1" >> $RES_UNKN - ;; - esac -} - -function initResults { - RES_GOOD=$(mktemp) - echo -n "0" > $RES_GOOD - RES_FAIL=$(mktemp) - echo -n "0" > $RES_FAIL - RES_TIME=$(mktemp) - echo -n "0" > $RES_TIME - RES_SEGV=$(mktemp) - echo -n "0" > $RES_SEGV - RES_UNKN=$(mktemp) - echo -n "0" > $RES_UNKN -} - -function clearResults { - rm $RES_GOOD - rm $RES_FAIL - rm $RES_TIME - rm $RES_SEGV - rm $RES_UNKN -} - -function outputResults { - echo "" >> $RES_GOOD - echo "" >> $RES_FAIL - echo "" >> $RES_TIME - echo "" >> $RES_SEGV - echo "" >> $RES_UNKN - - # summary - echo -ne "\n\t" - echo "RES: GOOD:" $(bc < $RES_GOOD) ", FAIL:" $(bc < $RES_FAIL) ", TIME:" $(bc < $RES_TIME) ", SEGV:" $(bc < $RES_SEGV), "UNKN:" $(bc < $RES_UNKN) - echo "" -} - -function subtreeRepeatsTest { - initResults - - echo "subtreeRepeatsTest" - - echo "Testing on predefined trees" - echo -ne "\t" - - for TREE_FILE in `ls $TESTS_DIR/repeats.test*.xml`; do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_COPY=$(mktemp) - cat $TREE_FILE > $TREE_COPY - bgxlimit ${JOBS} runRepeatsAlgorithmTest "$TREE_COPY" - done - wait - - outputResults - clearResults - - initResults - - echo "Testing on randomly generated trees" - echo -ne "\t" - - for i in $(seq 1 $TESTCASE_ITERATIONS); do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_FILE=$(mktemp) - ./arand2 -t RT --nodes $NODES --terminals $(( $RANDOM % $ALPHABET_SIZE + 1 )) --height $HEIGHT > $TREE_FILE - bgxlimit ${JOBS} runRepeatsAlgorithmTest "$TREE_FILE" - done - wait - - outputResults - clearResults -} - -function postfixToRankedTest { - initResults - - echo "PostfixToRankedTest" - - echo "Testing on predefined trees" - echo -ne "\t" - - for TREE_FILE in `ls $TESTS_DIR/repeats.test*.xml`; do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_COPY=$(mktemp) - cat $TREE_FILE > $TREE_COPY - bgxlimit ${JOBS} runPostfix2RankedAlgorithmTest "$TREE_COPY" - done - wait - - outputResults - clearResults - - initResults - - echo "Testing on randomly generated trees" - echo -ne "\t" - - for i in $(seq 1 $TESTCASE_ITERATIONS); do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_FILE=$(mktemp) - ./arand2 -t RT --nodes $NODES --terminals $(( $RANDOM % $ALPHABET_SIZE + 1 )) --height $HEIGHT > $TREE_FILE - bgxlimit ${JOBS} runPostfix2RankedAlgorithmTest "$TREE_FILE" - done - wait - - outputResults - clearResults -} - -function naivePostfixRepeatsTest { - initResults - - echo "NaivePostfixRepeatsTest" - - echo "Testing on predefined trees" - echo -ne "\t" - - for TREE_FILE in `ls $TESTS_DIR/repeats.test*.xml`; do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_COPY=$(mktemp) - cat $TREE_FILE > $TREE_COPY - bgxlimit ${JOBS} runNaivePostfixRepeatsTest "$TREE_COPY" - done - wait - - outputResults - clearResults - - initResults - - echo "Testing on randomly generated trees" - echo -ne "\t" - - for i in $(seq 1 $TESTCASE_ITERATIONS); do - # echo "Testing tree $(basename $TREE_FILE) " - TREE_FILE=$(mktemp) - ./arand2 -t RT --nodes $NODES --terminals $(( $RANDOM % $ALPHABET_SIZE + 1 )) --height $HEIGHT > $TREE_FILE - bgxlimit ${JOBS} runNaivePostfixRepeatsTest "$TREE_FILE" - done - wait - - outputResults - clearResults -} - - -subtreeRepeatsTest -postfixToRankedTest -naivePostfixRepeatsTest -- GitLab