54 lines
1.4 KiB
Bash
Executable File
54 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Tcl-on-SX test runner — epoch protocol to sx_server.exe
|
|
set -uo pipefail
|
|
cd "$(git rev-parse --show-toplevel)"
|
|
|
|
SX_SERVER="${SX_SERVER:-hosts/ocaml/_build/default/bin/sx_server.exe}"
|
|
if [ ! -x "$SX_SERVER" ]; then
|
|
SX_SERVER="/root/rose-ash/hosts/ocaml/_build/default/bin/sx_server.exe"
|
|
fi
|
|
if [ ! -x "$SX_SERVER" ]; then echo "ERROR: sx_server.exe not found"; exit 1; fi
|
|
|
|
VERBOSE="${1:-}"
|
|
TMPFILE=$(mktemp)
|
|
trap "rm -f $TMPFILE" EXIT
|
|
|
|
cat > "$TMPFILE" << 'EPOCHS'
|
|
(epoch 1)
|
|
(load "lib/tcl/tokenizer.sx")
|
|
(epoch 2)
|
|
(load "lib/tcl/parser.sx")
|
|
(epoch 3)
|
|
(load "lib/tcl/tests/parse.sx")
|
|
(epoch 4)
|
|
(eval "(tcl-run-parse-tests)")
|
|
EPOCHS
|
|
|
|
OUTPUT=$(timeout 30 "$SX_SERVER" < "$TMPFILE" 2>&1)
|
|
[ "$VERBOSE" = "-v" ] && echo "$OUTPUT"
|
|
|
|
# Result follows an (ok-len 3 N) line
|
|
RESULT=$(echo "$OUTPUT" | grep -A1 "^(ok-len 4 " | tail -1)
|
|
if [ -z "$RESULT" ]; then
|
|
RESULT=$(echo "$OUTPUT" | grep "^(ok 4 " | sed 's/^(ok 3 //' | sed 's/)$//')
|
|
fi
|
|
if [ -z "$RESULT" ]; then
|
|
echo "ERROR: no result from epoch 4"
|
|
echo "$OUTPUT" | tail -10
|
|
exit 1
|
|
fi
|
|
|
|
PASSED=$(echo "$RESULT" | grep -o ':passed [0-9]*' | grep -o '[0-9]*$')
|
|
FAILED=$(echo "$RESULT" | grep -o ':failed [0-9]*' | grep -o '[0-9]*$')
|
|
PASSED=${PASSED:-0}; FAILED=${FAILED:-1}
|
|
TOTAL=$((PASSED + FAILED))
|
|
|
|
if [ "$FAILED" = "0" ]; then
|
|
echo "ok $PASSED/$TOTAL tcl-tokenize tests passed"
|
|
exit 0
|
|
else
|
|
echo "FAIL $PASSED/$TOTAL passed, $FAILED failed"
|
|
echo "$RESULT"
|
|
exit 1
|
|
fi
|