test/reject 1.0 KiB raw
1
#!/bin/sh
2
# Require semantic rejection of one source fixture with its expected diagnostic.
3
set -eu
4
5
source=$1
6
expected=$(sed -n 's|^//! rejects: ||p' "$source")
7
test -n "$expected"
8
work=$(mktemp -d)
9
trap 'rm -rf "$work"' EXIT HUP INT TERM
10
11
set --
12
if grep -q '^//! session-support$' "$source"; then
13
    set -- -pkg std
14
    while IFS= read -r source_module; do
15
        set -- "$@" -mod "$source_module"
16
    done < test/support/std.lib
17
fi
18
set -- "$@" -pkg test -mod "$source" -entry test -dump il
19
for source_module in "${source%.rad}"/*.rad; do
20
    if [ -f "$source_module" ]; then
21
        set -- "$@" -mod "$source_module"
22
    fi
23
done
24
25
status=0
26
timeout 10 "${RAD_EMULATOR:-emulator}" -memory-size=385024 -data-size=348160 \
27
    -stack-size=1024 -run "${RAD_BIN:-bin/radiance.rv64.dev}" "$@" \
28
    >"$work/compiler.log" 2>&1 || status=$?
29
if [ "$status" -ne 1 ] || ! grep -F "$source:" "$work/compiler.log" | grep -Fq "error: $expected"; then
30
    cat "$work/compiler.log"
31
    echo "error: expected semantic rejection: $expected (exit $status)"
32
    exit 1
33
fi