run.sh raw

   1  #!/bin/bash
   2  # Restriction test runner: compiles each .mx, checks it fails cleanly.
   3  set -euo pipefail
   4  
   5  SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
   6  ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
   7  source "$SCRIPT_DIR/../util.sh"
   8  
   9  echo ""
  10  echo "=== Phase 0b: Restrictions ==="
  11  
  12  for f in "$SCRIPT_DIR"/*.mx; do
  13  	[ -f "$f" ] || continue
  14  	name="restrict:$(basename "$f" .mx)"
  15  	t0=$(date +%s%N)
  16  	td="$(tempdir "rst_$(basename "$f" .mx)")"
  17  	rm -rf "$td"; mkdir -p "$td"
  18  	mkdir -p "$td/pkg"
  19  	cp "$f" "$td/pkg/main.mx"
  20  
  21  	expected=$(grep "^// expected:" "$f" | head -1 | sed 's/^\/\/ expected: *//')
  22  	if [ -z "$expected" ]; then
  23  		log_fail "$name" "no '// expected:' header"
  24  		rm -rf "$td"
  25  		continue
  26  	fi
  27  
  28  	log="$td/build.log"
  29  	rc=0
  30  	MOXIEROOT="$ROOT" "$MOXIE" build -o /dev/null "$td/pkg" >"$log" 2>&1 || rc=$?
  31  
  32  	if [ $rc -eq 0 ]; then
  33  		log_fail "$name" "compiler did not reject (exit 0, expected error: '$expected')"
  34  		rm -rf "$td"
  35  		continue
  36  	fi
  37  
  38  	if grep -qE "panic:|caught signal|nil pointer dereference" "$log" 2>/dev/null; then
  39  		log_fail "$name" "compiler crashed instead of producing clean error"
  40  		rm -rf "$td"
  41  		continue
  42  	fi
  43  
  44  	if ! grep -qiF "$expected" "$log" 2>/dev/null; then
  45  		log_fail "$name" "expected error '$expected' not found in output"
  46  		tail -5 "$log"
  47  		rm -rf "$td"
  48  		continue
  49  	fi
  50  
  51  	t1=$(date +%s%N)
  52  	log_pass "$name" "ok"
  53  	rm -rf "$td"
  54  done
  55