Files
el/lang/tests/calendar/run.sh
T
will.anderson 0a72fced28
El SDK CI - dev / build-and-test (pull_request) Failing after 13m17s
engram: WAL persistence + integrity hardening + single canonical runtime
Establish lang/runtime/ as the ONE canonical el runtime (from the active
runtime that carries hebb/emb persistence + the new WAL); repoint the el CI
publish, engram build, elb default, and in-repo build scripts to it; delete
the el-compiler/runtime + lang/releases/ forks; add scripts/check-single-runtime.sh
drift guard.

Fixes a live prod bug: the el CI published el-runtime-c/-h from the LAGGING
el-compiler fork (0 hebb refs), so the shipped soul never persisted Hebbian
edge weights — learned co-activation was wiped on every restart. Publishing
from canonical ships the stranded 'learning that cannot outlive the process'
fix.

WAL storage engine + integrity fixes (DELETE->tombstone + store-layer
protection, safe data-dir default) ride in behind ENGRAM_WAL (default off =
byte-identical to today). Verified: engram elb per-module build clean, WAL
gate 66/66, native smoke ok, drift-guard green.
2026-08-11 21:31:37 -05:00

108 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# run.sh — build and execute the calendar/ acceptance corpus.
#
# Each examples/<case>.el is a self-contained El program with a fn main()
# that prints a single deterministic result line. The runner compiles each
# via the canonical native elc, links it against the shared C runtime, runs
# it, and asserts the output matches the expected value.
set -uo pipefail
cd "$(dirname "$0")"
EL_HOME="${EL_HOME:-$(cd ../.. && pwd)}"
ELC="${EL_HOME}/dist/platform/elc"
RUNTIME_DIR="${EL_HOME}/runtime"
if [ ! -x "${ELC}" ]; then
echo "elc not found at ${ELC}" >&2
exit 1
fi
PASS=0
FAIL=0
FAILED_NAMES=()
# run_runtime_case <name> <source> <expected> [<extra>]
run_runtime_case() {
local name="$1"
local src="$2"
local expected="$3"
local mode="${4:-exact}"
local out_c
local out_bin
out_c="$(mktemp -t cal_test.XXXXXX).c"
out_bin="$(mktemp -t cal_test.XXXXXX)"
if ! "${ELC}" "${src}" > "${out_c}" 2>/tmp/cal_test.elc.err; then
echo "FAIL ${name} — elc emit failed:"
cat /tmp/cal_test.elc.err | sed 's/^/ /'
FAIL=$((FAIL+1))
FAILED_NAMES+=("${name}")
rm -f "${out_c}" "${out_bin}"
return
fi
if ! cc -O2 -I "${RUNTIME_DIR}" "${out_c}" "${RUNTIME_DIR}/el_runtime.c" \
-lcurl -lssl -lcrypto -lpthread -lm -o "${out_bin}" 2>/tmp/cal_test.cc.err; then
echo "FAIL ${name} — cc failed:"
cat /tmp/cal_test.cc.err | sed 's/^/ /'
FAIL=$((FAIL+1))
FAILED_NAMES+=("${name}")
rm -f "${out_c}" "${out_bin}"
return
fi
local got
got="$("${out_bin}" 2>&1 | tr -d '[:space:]')"
if [ "${mode}" = "either" ]; then
local ok=0
local IFS=','
for choice in ${expected}; do
if [ "${got}" = "${choice}" ]; then ok=1; break; fi
done
if [ "${ok}" = "1" ]; then
echo "PASS ${name} (got: ${got})"
PASS=$((PASS+1))
else
echo "FAIL ${name} expected one of {${expected}}, got: ${got}"
FAIL=$((FAIL+1))
FAILED_NAMES+=("${name}")
fi
else
if [ "${got}" = "${expected}" ]; then
echo "PASS ${name}"
PASS=$((PASS+1))
else
echo "FAIL ${name} expected: ${expected}, got: ${got}"
FAIL=$((FAIL+1))
FAILED_NAMES+=("${name}")
fi
fi
rm -f "${out_c}" "${out_bin}"
}
echo "==> Running calendar/ acceptance corpus"
echo
run_runtime_case "earth-zone" examples/earth-zone.el "EDT"
run_runtime_case "dst-spring-forward" examples/dst-spring-forward.el "03:30EDT"
run_runtime_case "mars-calendar" examples/mars-calendar.el "1"
run_runtime_case "cycle-30hr" examples/cycle-30hr.el "0.5"
run_runtime_case "cycle-300yr" examples/cycle-300yr.el "0.01"
run_runtime_case "no-cycle" examples/no-cycle.el "1"
run_runtime_case "cross-calendar-comparison" examples/cross-calendar-comparison.el "1"
run_runtime_case "local-date-arithmetic" examples/local-date-arithmetic.el "2026-6-4"
run_runtime_case "rhythm-grounding" examples/rhythm-grounding.el "1778504400"
run_runtime_case "rhythm-cycle-30hr" examples/rhythm-cycle-30hr.el "54000"
echo
echo "${PASS} passed, ${FAIL} failed"
if [ "${FAIL}" -gt 0 ]; then
echo "failed: ${FAILED_NAMES[*]}"
exit 1
fi
exit 0