diff --git a/tests.repeats.sh b/tests.repeats.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d81f92f20bbb9f118fac5ec1746ce2acef137377
--- /dev/null
+++ b/tests.repeats.sh
@@ -0,0 +1,287 @@
+#!/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 atniceprint arand2 "
+TESTS_DIR="`pwd`/examples2/tree"
+
+RES_GOOD=
+RES_FAIL=
+RES_TIME=
+RES_SEGV=
+RES_UNKN=
+
+
+# ----------------------------
+
+for FILE in $EXECUTABLES; do
+	if [ ! -f bin-$1/$FILE ]; then
+		echo "Executable $FILE is required for testing. Make sure it is in bin-$1 folder."
+		exit 1
+	fi
+done
+
+cd bin-$1/
+rm -f $LOGFILE
+
+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 | ./atniceprint >> $ONE
+	cat $6 | ./atniceprint >> $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 | ./atniceprint > $RANKED
+	./acast2 -t RankedTree -i $1 | ./acast2 -t PostfixRankedTree | ./acast2 -t RankedTree | ./atniceprint > $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
+}
+
+# $1 = TREE_FILE
+function runRepeatsAlgorithmTest {
+
+	NAIVE_OUTPUT=$(mktemp)
+	ADVANCED_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
+
+	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
+}
+
+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
+}
+
+subtreeRepeatsTest
+postfixToRankedTest