diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e239a18f7c0d5db117b90e7527f04d7a306ab97c..3a335cafd120224211c6647012e46668ac618993 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 afb2754d476fad617a8fe1e9ffbfc884a6edc020..b9ffa3011133b7f4e0350607e4260e18d3fd4861 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 6006b95b1c0f885b83d1d00cb10ddf6ae4673927..0000000000000000000000000000000000000000 --- 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 6bad1a75cfbf59ce6fa26a896001ab8a300085cc..0000000000000000000000000000000000000000 --- 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 ed239867b9a19ecb3c9c90b5a1ccaf1b4faedb16..0000000000000000000000000000000000000000 --- 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 66687753a477341e3873ba4fb3745ac673288f7c..0000000000000000000000000000000000000000 --- 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 7b0140bb6a11bbc1cd874b77bf423e08711a18bb..0000000000000000000000000000000000000000 --- 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 9e4ed0aba6da3126c54acd91e733f0f349690297..0000000000000000000000000000000000000000 --- 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 61027b1d50373e2eecfb07720ad90b195cab47db..0000000000000000000000000000000000000000 --- 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 4561cafb3a2d054efa524a99835ff1ba5b641020..0000000000000000000000000000000000000000 --- 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 7dc7ae2a233c7aea79569b6907efcf5a4cd996bc..0000000000000000000000000000000000000000 --- 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 d198c2eac0612675f96b097f63c70a926d98c5d5..0000000000000000000000000000000000000000 --- 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 1a6387563c74d3dd245f725740d8762c02a7be68..0000000000000000000000000000000000000000 --- 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 29a722962f90d96ba206a066199e998caaf822ff..0000000000000000000000000000000000000000 --- 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 704b4ae99a6593a1ce0ae0b0b275dc0d29c5de78..0000000000000000000000000000000000000000 --- 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 190e4b8c55c8f476a185168a4c855c130a92c4d9..0000000000000000000000000000000000000000 --- 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 24542df3aa8eb23a047b67b4b7bdbdc4d3487578..0000000000000000000000000000000000000000 --- 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 47e327f742ed845168c783fc4bf89efe51e77cb6..0000000000000000000000000000000000000000 --- 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 741826059a558704de67223eb02e475a2383d802..0000000000000000000000000000000000000000 --- 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 f2cd6629008be3aa3556f9b6f8a7759da5008f4a..0000000000000000000000000000000000000000 --- 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 933cabdb769a1d98a97412d7c32995abb27cf742..0000000000000000000000000000000000000000 --- 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 7d7f358d865d9eb93ae95f0255e12e48e5d66866..0000000000000000000000000000000000000000 --- 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 2702a42a56dd2ed52ebe64f6c0f7c2617354bffb..0000000000000000000000000000000000000000 --- 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