#!/bin/sh
# Stage 1 gate: the port of Linas's stage A (counts) + B (pair MI) must reproduce G0's state-B exactly,
# and the check must FAIL on three broken inputs. Usage: check_ab.sh <g0-run-dir> <scratch-dir>
set -e
cd "$(dirname "$0")"
R=$1; S=$2
gcc -O2 -o pairmi pairmi.c -lm 2>/dev/null
./pairmi "$R/parses-A.tsv" > "$S/ours-B.tsv"
python3 diffstate.py "$R/state-B.tsv" "$S/ours-B.tsv" | head -1
echo "MATCH: PASS"
sed '1000d' "$R/parses-A.tsv" > "$S/m-drop.tsv"
sed 's/(WordNode "Alice")/(WordNode "alice")/' "$R/parses-A.tsv" > "$S/m-rename.tsv"
python3 - "$R/parses-A.tsv" "$S/m-flip.tsv" <<'PY'
import re, sys
pat = re.compile(r'\(ListLink (\(WordNode "[^"]*"\)) (\(WordNode "[^"]*"\))\)')
with open(sys.argv[1]) as f, open(sys.argv[2], 'w') as g:
for i, line in enumerate(f):
if 'EdgeLink' in line and i % 100 == 0: line = pat.sub(lambda m: f'(ListLink {m.group(2)} {m.group(1)})', line)
g.write(line)
PY
for m in drop rename flip; do
./pairmi "$S/m-$m.tsv" > "$S/m-$m.out"
if python3 diffstate.py "$R/state-B.tsv" "$S/m-$m.out" > "$S/m-$m.diff"; then echo "MUTATION $m: NOT CAUGHT"; exit 1; fi
echo "MUTATION $m: caught — $(head -1 "$S/m-$m.diff")"
done