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