run.sh raw
1 #!/bin/bash
2 # Restriction test suite for Moxie.
3 # Tests that removed builtins, types, and statements produce compile errors,
4 # and that valid Moxie patterns compile and run correctly.
5 set -euo pipefail
6
7 MOXIE="${MOXIE:-./moxie}"
8 TESTDIR="$(cd "$(dirname "$0")" && pwd)"
9 TMPDIR=$(mktemp -d)
10 trap "rm -rf $TMPDIR" EXIT
11
12 export PATH="/usr/lib/llvm19/bin:$PATH"
13
14 pass=0
15 fail=0
16
17 run_pass_test() {
18 local src="$1"
19 local name=$(basename "$src" .go)
20 local bin="$TMPDIR/$name"
21
22 if ! "$MOXIE" build -o "$bin" "$src" 2>"$TMPDIR/$name.err"; then
23 echo "FAIL $name: compilation failed"
24 cat "$TMPDIR/$name.err"
25 fail=$((fail + 1))
26 return
27 fi
28
29 local output
30 output=$(timeout 5 "$bin" 2>&1 || true)
31
32 if echo "$output" | grep -q "FAIL:"; then
33 echo "FAIL $name: wrong values"
34 echo "$output"
35 fail=$((fail + 1))
36 return
37 fi
38 if echo "$output" | grep -q "PASS:"; then
39 local passes=$(echo "$output" | grep -c "PASS:" || true)
40 echo "OK $name ($passes checks)"
41 pass=$((pass + 1))
42 else
43 echo "FAIL $name: no PASS markers in output"
44 echo "$output"
45 fail=$((fail + 1))
46 fi
47 }
48
49 run_fail_test() {
50 local src="$1"
51 local pattern="$2"
52 local name=$(basename "$src" .go)
53 local bin="$TMPDIR/$name"
54
55 local errout
56 if errout=$("$MOXIE" build -o "$bin" "$src" 2>&1); then
57 echo "FAIL $name: compilation should have failed"
58 fail=$((fail + 1))
59 return
60 fi
61
62 if echo "$errout" | grep -qi "$pattern"; then
63 echo "OK $name (rejected: $pattern)"
64 pass=$((pass + 1))
65 else
66 echo "FAIL $name: expected error containing '$pattern'"
67 echo "$errout"
68 fail=$((fail + 1))
69 fi
70 }
71
72 echo "=== Restriction positive tests ==="
73 for src in "$TESTDIR"/pass_*.go; do
74 run_pass_test "$src"
75 done
76
77 echo ""
78 echo "=== Restriction negative tests ==="
79 run_fail_test "$TESTDIR/fail_new.go" "new.*not allowed"
80 run_fail_test "$TESTDIR/fail_complex_builtin.go" "complex.*not"
81 run_fail_test "$TESTDIR/fail_real.go" "real.*not\|complex.*not"
82 run_fail_test "$TESTDIR/fail_imag.go" "imag.*not\|complex.*not"
83 run_fail_test "$TESTDIR/fail_complex64.go" "complex64"
84 run_fail_test "$TESTDIR/fail_complex128.go" "complex128"
85 run_fail_test "$TESTDIR/fail_uintptr.go" "uintptr"
86 run_fail_test "$TESTDIR/fail_fallthrough.go" "fallthrough"
87
88 echo ""
89 echo "=== Results: $pass passed, $fail failed ==="
90 [ "$fail" -eq 0 ]
91