#!/bin/sh
# Check that reservation misuse fails during compilation.
set -eu
emulator=$1
shift
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT HUP INT TERM
for name in duplicate abandon; do
    case "$name" in
        duplicate) diagnostic='linear value used after consumption' ;;
        abandon) diagnostic='linear value is not consumed' ;;
    esac
    if "$emulator" -memory-size=385024 -data-size=348160 -stack-size=1024 \
        -run bin/radiance.rv64.dev "$@" -test \
        -pkg "$name" -mod "test/slots/$name.rad" -entry "$name" \
        -o "$work/test.rv64" > "$work/log" 2>&1; then
        printf 'reservation misuse compiled: %s\n' "$name" >&2
        exit 1
    fi
    if ! grep -q "$diagnostic" "$work/log"; then
        cat "$work/log" >&2
        exit 1
    fi
    printf 'reservation rejection: %s passed\n' "$name"
done
