-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtestall.sh
executable file
·127 lines (103 loc) · 2.46 KB
/
testall.sh
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
122
123
124
125
126
127
#!/bin/sh
# Original script by Stephen Edwards for COMSW4115. Modified by Julie Chien for use in RC++'s test suite.
# Regression testing script for MicroC
# Step through a list of files
# Compile, run, and check the output of each expected-to-work test
# Compile and check the error of each expected-to-fail test
COMPILE="g++ -std=c++11 -g -Wall -I/usr/local/include -L/usr/local/lib -lboost_thread-mt -lboost_system "
# Set time limit for all operations
ulimit -t 30
globallog=testall.log
rm -f $globallog
error=0
globalerror=0
keep=0
Usage() {
echo "Usage: testall.sh [options] [.cpp files]"
echo "-k Keep intermediate files"
echo "-h Print this help"
exit 1
}
SignalError() {
if [ $error -eq 0 ] ; then
echo "FAILED"
error=1
fi
echo " $1"
}
# Compare <outfile> <reffile> <difffile>
# Compares the outfile with reffile. Differences, if any, written to difffile
Compare() {
generatedfiles="$generatedfiles $3"
echo diff -b -B $1 $2 ">" $3 1>&2
diff -b "$1" "$2" > "$3" 2>&1 || {
SignalError "$1 differs"
echo "FAILED $1 differs from $2" 1>&2
}
}
# Run <args>
# Report the command, run it, and report any errors
Run() {
echo $* 1>&2
eval $* || {
SignalError "$1 failed on $*"
return 1
}
}
Check() {
error=0
basename=`echo $1 | sed 's/.*\\///
s/.cpp//'`
reffile=`echo $1 | sed 's/.cpp$//'`
basedir="`echo $1 | sed 's/\/[^\/]*$//'`/."
echo -n "$basename..."
echo 1>&2
echo "###### Testing $basename" 1>&2
generatedfiles=""
generatedfiles="$generatedfiles ${basename}.ll ${basename}.gr ${basename}.out.dSYM" &&
Run "$COMPILE" $1 " -o ${basename}.out" &&
Run "./${basename}.out" ">" "${basename}.gr" &&
Compare ${basename}.gr ${reffile}.gr ${basename}.diff
# Report the status and clean up the generated files
if [ $error -eq 0 ] ; then
if [ $keep -eq 0 ] ; then
rm -rf $generatedfiles
fi
echo "OK"
echo "###### SUCCESS" 1>&2
else
echo "###### FAILED" 1>&2
globalerror=$error
fi
}
while getopts kdpsh c; do
case $c in
k) # Keep intermediate files
keep=1
;;
h) # Help
Usage
;;
esac
done
shift `expr $OPTIND - 1`
if [ $# -ge 1 ]
then
files=$@
else
files="Tests/test-*.cpp"
fi
for file in $files
do
case $file in
*test-*)
Check $file 2>> $globallog
;;
*)
echo "unknown file type $file"
globalerror=1
;;
esac
done
rm -rf *.out *.gr *.dSYM
exit $globalerror