#!/usr/bin/env sh
# spec/verifier/run-vectors.sh
# Runs every conformance vector in spec/verifier/vectors/ through the
# reference offline verifier. No network. Exits non-zero if any vector's
# computed verdict differs from its expected verdict.
#
#   sh spec/verifier/run-vectors.sh            # from the repo root
#   sh spec/verifier/run-vectors.sh -v         # print every step

set -u
HERE=$(cd "$(dirname "$0")" && pwd)
VERIFIER="$HERE/verify-offline.js"
VERBOSE=0
[ "${1:-}" = "-v" ] && VERBOSE=1

total=0
failed=0
failures=""

for f in "$HERE"/vectors/*.json; do
  [ -e "$f" ] || continue
  total=$((total + 1))
  name=$(basename "$f" .json)
  if [ "$VERBOSE" -eq 1 ]; then
    if node "$VERIFIER" "$f"; then
      echo "PASS $name"
    else
      echo "FAIL $name"; failed=$((failed + 1)); failures="$failures $name"
    fi
    echo
  else
    if out=$(node "$VERIFIER" "$f" 2>&1); then
      echo "PASS $name"
    else
      echo "FAIL $name"; echo "$out" | sed 's/^/     /'; failed=$((failed + 1)); failures="$failures $name"
    fi
  fi
done

echo
echo "vectors: $((total - failed))/$total matched expected verdicts"
if [ "$failed" -ne 0 ]; then
  echo "mismatches:$failures"
  exit 1
fi
exit 0
