Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/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
}
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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
}
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# $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
}
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
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
}