bgen/test/run_tests.sh
saarsena@gmail.com e45f121fb9 init
2026-04-16 21:04:50 -04:00

53 lines
1.6 KiB
Bash
Executable file

#!/usr/bin/env bash
# Golden-seed regression. For each seed in goldens.txt, regenerate the map and
# compare (sha256 of map + summary line). Non-zero exit on any mismatch.
set -u
cd "$(dirname "$0")/.."
BIN=./bin/genesis
GOLDENS=test/goldens.txt
if [[ ! -x "$BIN" ]]; then
echo "error: $BIN not built. Run 'make' first." >&2
exit 2
fi
if [[ ! -f "$GOLDENS" ]]; then
echo "error: $GOLDENS missing. Run test/update_goldens.sh to create." >&2
exit 2
fi
fail=0
total=0
while IFS='|' read -r key expected_hash expected_summary; do
[[ -z "${key:-}" || "${key:0:1}" == "#" ]] && continue
seed="${key%:*}"
depth="${key#*:}"
[[ "$depth" == "$seed" ]] && depth=1
total=$((total + 1))
actual_hash=$("$BIN" --seed "$seed" --depth "$depth" 2>/dev/null | sha256sum | awk '{print $1}')
actual_summary=$("$BIN" --seed "$seed" --depth "$depth" --quiet 2>&1 >/dev/null)
if [[ "$actual_hash" != "$expected_hash" ]]; then
echo "FAIL $key hash mismatch"
echo " expected: $expected_hash"
echo " actual: $actual_hash"
fail=$((fail + 1))
continue
fi
if [[ "$actual_summary" != "$expected_summary" ]]; then
echo "FAIL $key summary mismatch"
echo " expected: $expected_summary"
echo " actual: $actual_summary"
fail=$((fail + 1))
continue
fi
echo "PASS $key"
done < "$GOLDENS"
echo "----"
echo "$((total - fail))/$total passed"
# Invariant sweep: run a wider stress check to catch regressions the goldens
# might miss.
echo "---- stress (connectivity invariant, 1000 seeds) ----"
"$BIN" --stress 1000 2>&1 | tail -1
exit $fail