#!/bin/sh
# guest_run.sh — full rig matrix ON THE GUEST (DragonFly, 12 GiB RAM).
cd /tmp/qr
fails=0

echo "### uname"
uname -a

echo "### selftest"
./qsort_rig selftest; echo "rc=$?"

echo "### fuzz (differential vs libc: verbatim + f6 + f67 + kqsort_r)"
./qsort_rig fuzz 8000 0xDF5696; rc=$?; echo "rc=$rc"; [ $rc = 0 ] || fails=1

echo "### fuzz_lie (inconsistent comparators, memory-safety only)"
./qsort_rig fuzz_lie 2000 0xDF5696; rc=$?; echo "rc=$rc"; [ $rc = 0 ] || fails=1

echo "### truncate (2.16e9-byte partition -> int truncation + unsigned promotion -> OOB partition state; A/B)"
timeout 900 ./qsort_rig truncate; rc=$?; echo "rc=$rc (expect 9 = OOB partition state confirmed)"; [ $rc = 9 ] || fails=1

echo "### med3_oob (>=16GiB VA: d=(n/8)*es int overflow -> OOB comparator args)"
timeout 300 ./qsort_rig med3_oob; rc=$?; echo "rc=$rc (expect 3 = OOB args confirmed)"; [ $rc = 3 ] || fails=1

echo "### med3_oob_fixed (patched: no OOB args in first 1000 cmps)"
timeout 300 ./qsort_rig med3_oob_fixed; rc=$?; echo "rc=$rc (expect 0)"; [ $rc = 0 ] || fails=1

echo "### es0_contrast"
timeout 60 ./qsort_rig es0_contrast >/dev/null; rc=$?; echo "rc=$rc (expect 0)"; [ $rc = 0 ] || fails=1

echo "### es0_hang (verbatim es=0 n=64: non-termination)"
timeout 300 ./qsort_rig es0_hang; rc=$?; echo "rc=$rc (expect 7)"; [ $rc = 7 ] || fails=1

echo "### es0_segv (verbatim es=0 n=7: 8-byte access at zero-length array base)"
timeout 60 ./qsort_rig es0_segv; rc=$?; echo "rc=$rc (expect 0 = SIGSEGV confirmed)"; [ $rc = 0 ] || fails=1

echo "### es0_segv_fixed (guarded f67: clean return)"
timeout 60 ./qsort_rig es0_segv_fixed; rc=$?; echo "rc=$rc (expect 0)"; [ $rc = 0 ] || fails=1

echo "OVERALL: $([ $fails = 0 ] && echo ALL_EXPECTATIONS_MET || echo FAILURES_PRESENT)"
exit $fails
