#!/bin/sh
# Run lowering tests.
# Usage: test/lower/run [<test.rad>...]
#
# If no arguments are provided, runs all tests in `lib/std/lang/lower/tests/`.

BINARY="test/lower/lower-test.rv64"
TEST_DIR="lib/std/lang/lower/tests"
EMU="${RAD_EMULATOR:-emulator} -stack-size=1024 -run"

if [ ! -f "$BINARY" ]; then
  echo "error: test binary not found: $BINARY" >&2
  echo "hint: run 'make lower-test' first" >&2
  exit 1
fi

# Disable core dumps for tests.
ulimit -c 0

# Collect tests.
if [ $# -eq 0 ]; then
  tests=$(find "$TEST_DIR" -name '*.rad' | sort)
else
  tests="$*"
fi

if [ -z "$tests" ]; then
  echo "error: no tests found" >&2
  exit 1
fi

passed=0
failed=0

for test in $tests; do
  if $EMU "$BINARY" -- "$test"; then
    passed=$((passed + 1))
  else
    failed=$((failed + 1))
  fi
done
echo

if [ "$failed" -eq 0 ]; then
  echo "test result: ok. $passed passed; $failed failed"
  exit 0
else
  echo "test result: FAILED. $passed passed; $failed failed"
  exit 1
fi
