#!/bin/sh
# Require semantic rejection of one source fixture with its expected diagnostic.
set -eu

source=$1
expected=$(sed -n 's|^//! rejects: ||p' "$source")
test -n "$expected"
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM

set --
if grep -q '^//! session-support$' "$source"; then
    set -- -pkg std
    while IFS= read -r source_module; do
        set -- "$@" -mod "$source_module"
    done < test/support/std.lib
fi
set -- "$@" -pkg test -mod "$source" -entry test -dump il
for source_module in "${source%.rad}"/*.rad; do
    if [ -f "$source_module" ]; then
        set -- "$@" -mod "$source_module"
    fi
done

status=0
timeout 10 "${RAD_EMULATOR:-emulator}" -memory-size=385024 -data-size=348160 \
    -stack-size=1024 -run "${RAD_BIN:-bin/radiance.rv64.dev}" "$@" \
    >"$work/compiler.log" 2>&1 || status=$?
if [ "$status" -ne 1 ] || ! grep -F "$source:" "$work/compiler.log" | grep -Fq "error: $expected"; then
    cat "$work/compiler.log"
    echo "error: expected semantic rejection: $expected (exit $status)"
    exit 1
fi
