#!/bin/sh # # Phase-0 test runner for M2c. # Usage: ./run_tests.sh (from the m2c directory, after ./build.sh) # pass=0 fail=0 expect_ok() { # $1 = test file (no dir) name="$1" out=$(./M2c "tests/$name" 2>&1) case "$out" in *"Parsed correctly"*) echo "ok $name accepted" pass=$((pass+1)) ;; *) echo "FAIL $name: expected accept, got: $out" fail=$((fail+1)) ;; esac } expect_fail() { # $1 = test file, $2 = message text expected in the .LST name="$1" want="$2" out=$(./M2c "tests/$name" 2>&1) case "$out" in *"Incorrect source"*) ;; *) echo "FAIL $name: expected rejection, got: $out" fail=$((fail+1)); return ;; esac lst="tests/$(basename "$name" .mod).LST" if grep -q "$want" "$lst" 2>/dev/null; then echo "ok $name rejected with [$want]" pass=$((pass+1)) else echo "FAIL $name: [$want] not found in $lst" fail=$((fail+1)) fi } echo "=== Phase-0 tests ===" expect_ok ok_minimal.mod expect_ok ok_nobegin.mod expect_fail bad_mismatch.mod "module name mismatch" expect_fail bad_syntax.mod "expected" echo "=== $pass passed, $fail failed ===" test "$fail" = 0