#!/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