blob: daf108424fbf8c2daa6bcedbf10c86374ff2629d (
plain)
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
|
#!/bin/sh
TESTS="
empty_module
unknown_variable
variable_name_as_type
variable_initialization
unknown_type
const_assignment_error
const_assignment_from_another_constant
const_assignment_from_another_constant_illegal_type
const_assignment_from_unknown_constant
variable_assign_from_constant
variable_assign_from_type
variable_assign_from_variable
variable_assign_from_expression
boolean_variable
character_variable
string_variable
if_statement
bool_conditions
type_check_assignment
type_check_comparision
while_statement
procedure_call
procedure_forward_declaration
procedure_local_variables
procedure_scoping
procedure_call_value_parameters
procedure_call_too_many_parameters
procedure_call_too_few_parameters
procedure_call_value_parameters_wrong_types
example_divisors
example_divisors_array_result
example_reverse_array
example_insertion_sort
"
run_test( )
{
TEST=$1
echo -n "$TEST"
if test ! -f "$TEST.e"; then
echo " SKIP (not found)"
return
fi
../ec < $TEST.e > $TEST.asm 2> _tmp
COMPILATION_RES=$?
grep -v '^Total ' _tmp | grep -v '^Arena' | grep -v 'bytes.*=' | grep -v 'max mmap' > $TEST.comp_err
rm -f _tmp
diff $TEST.asm $TEST.easm >/dev/null 2>&1
OUT=$?
diff $TEST.comp_err $TEST.ecomp_err >/dev/null 2>&1
ERR=$?
if test $OUT = 0 -a $ERR = 0; then
if test $COMPILATION_RES = 0; then
fasm $TEST.asm $TEST.ebin >/dev/null 2>&1
../asm-i386 < $TEST.asm > $TEST.bin 2> _tmp
grep -v '^Total ' _tmp | grep -v '^Arena' | grep -v 'bytes.*=' | grep -v 'max mmap' | grep -v 'Assembled in' > $TEST.asm_err
rm -f _tmp
cmp $TEST.bin $TEST.ebin >/dev/null 2>&1
OUT=$?
diff $TEST.asm_err $TEST.easm_err >/dev/null 2>&1
ERR=$?
if test $OUT = 0 -a $ERR = 0; then
../emul $TEST.bin > $TEST.run
diff $TEST.run $TEST.erun >/dev/null 2>&1
if test $? = 0; then
echo " PASS"
else
echo " FAIL"
diff $TEST.run $TEST.erun
echo "---"
fi
else
echo " FAIL"
cmp -b $TEST.asm $TEST.easm
diff $TEST.asm_err $TEST.easm_err
echo "---"
fi
else
echo " PASS (XFAIL)"
fi
else
echo " FAIL"
diff $TEST.asm $TEST.easm
diff $TEST.comp_err $TEST.ecomp_err
echo "---"
fi
}
list_tests( )
{
echo $TESTS | tr ' ' '\n'
}
cd "$(dirname "$0")"/tests
rm -f *.asm *.comp_err *.bin *.ebin *.run
if test "x$1" != "x"; then
if test "$1" = "list"; then
list_tests
else
run_test "$1"
fi
else
for test in $TESTS; do
run_test $test
done
fi
|