#!/usr/bin/env bash # lib/apl/test.sh — smoke-test the APL runtime layer. set -uo pipefail cd "$(git rev-parse --show-toplevel)" SX_SERVER="${SX_SERVER:-/root/rose-ash/hosts/ocaml/_build/default/bin/sx_server.exe}" if [ ! -x "$SX_SERVER" ]; then SX_SERVER="hosts/ocaml/_build/default/bin/sx_server.exe" fi if [ ! -x "$SX_SERVER" ]; then echo "ERROR: sx_server.exe not found." exit 1 fi TMPFILE=$(mktemp); trap "rm -f $TMPFILE" EXIT cat > "$TMPFILE" << 'EPOCHS' (epoch 1) (load "spec/stdlib.sx") (load "lib/apl/runtime.sx") (epoch 2) (eval "(define apl-test-pass 0)") (eval "(define apl-test-fail 0)") (eval "(define apl-test-fails (list))") (eval "(define apl-test (fn (name got expected) (if (= got expected) (set! apl-test-pass (+ apl-test-pass 1)) (begin (set! apl-test-fail (+ apl-test-fail 1)) (set! apl-test-fails (append apl-test-fails (list {:name name :got got :expected expected})))))))") (epoch 3) (load "lib/apl/tests/structural.sx") (epoch 4) (eval "(list apl-test-pass apl-test-fail)") EPOCHS OUTPUT=$(timeout 60 "$SX_SERVER" < "$TMPFILE" 2>/dev/null) LINE=$(echo "$OUTPUT" | awk '/^\(ok-len 4 / {getline; print; exit}') if [ -z "$LINE" ]; then LINE=$(echo "$OUTPUT" | grep -E '^\(ok 4 \([0-9]+ [0-9]+\)\)' | tail -1 \ | sed -E 's/^\(ok 4 //; s/\)$//') fi if [ -z "$LINE" ]; then echo "ERROR: could not extract summary" echo "$OUTPUT" | tail -10 exit 1 fi P=$(echo "$LINE" | sed -E 's/^\(([0-9]+) ([0-9]+)\).*/\1/') F=$(echo "$LINE" | sed -E 's/^\(([0-9]+) ([0-9]+)\).*/\2/') TOTAL=$((P + F)) if [ "$F" -eq 0 ]; then echo "ok $P/$TOTAL lib/apl tests passed" else echo "FAIL $P/$TOTAL passed, $F failed" fi [ "$F" -eq 0 ]