-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrun-test
executable file
·51 lines (44 loc) · 1.38 KB
/
run-test
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
#!/bin/bash
set -e
export DECAF_JAR=$PWD/../build/libs/decaf.jar
export RUNTIME_C=$PWD/../rt/runtime.c
parse_args() {
case $1 in
1a) export DIR=PA1 ; export TGT=PA1 ;;
1b) export DIR=PA1 ; export TGT=PA1-LL ;;
2) export DIR=PA2 ; export TGT=PA2 ;;
3) export DIR=PA3 ; export TGT=PA3 ;;
5-x86) export DIR=PA3 ; export TGT=PA5-X86 ; export EMIT_BINARY=1 ;;
*) echo "Usage: $0 [1a|1b|2|3|5-x86]" ; exit 1 ;;
esac
[[ -f $DECAF_JAR ]] || (echo "Cannot find $DECAF_JAR. Did you 'gradle build'?" ; exit 1)
}
prepare() {
cd input && TESTS=(`ls -1 *.decaf | sed 's/\.decaf//'`) && cd ..
rm -rf output && mkdir output
[[ -n $EMIT_BINARY ]] && gcc -m32 -S $RUNTIME_C -o output/rt.s || true
}
run_test() {
T=$1
java -jar $DECAF_JAR -t $TGT -o output/$T.output -d output input/$T.decaf >output/$T.log 2>&1
if [[ -n $EMIT_BINARY ]]; then
gcc -m32 output/$T.s output/rt.s -o output/$T
(output/$T > output/$T.output 2>&1) || true
fi
}
export -f run_test
check_output(){
NPASS=0
NTOT=${#TESTS[@]}
for T in ${TESTS[@]}; do
echo "==========" $T
diff -qZ output/$T.output expected/$T.result && NPASS=$((NPASS+1))
done
echo "Pass/Total: ${NPASS}/${NTOT}"
exit `[ $NPASS = $NTOT ]`
}
parse_args $1
cd $DIR
prepare
parallel --halt now,fail=1 run_test ::: ${TESTS[@]}
check_output