#!/bin/sh # Build + RUN the §7 GROUNDING-VECTOR tests (engram_cognition.c): the one decay # model, the consequence gate, and the stored/derived split. Closed-form # constructed cases — no server, no store, no network. Pure C11 (stdlib + libm). # Standalone — NOT folded through elc. Two passes: # 1. PERF — optimised (-O2, no sanitizer): the functional gate. # 2. SAFETY — ASan + UBSan on the same suite. # # NEGATIVE CONTROL (invariant §8.6 — no test without one). Every symbol this # suite exercises (cog_decay_factor, cog_grounding_significant, # cog_significance_inherent, CogGrounding, CogProvClass) is introduced by the # change under test, so the suite does not COMPILE against the pre-change source. # To reproduce: # git show origin/dev:lang/runtime/engram_cognition.h > /tmp/pre/engram_cognition.h # git show origin/dev:lang/runtime/engram_cognition.c > /tmp/pre/engram_cognition.c # cc -I/tmp/pre engram/test/test_grounding_vector.c /tmp/pre/engram_cognition.c ... # => error: unknown type name 'CogGrounding'; no binary produced. set -e HERE=$(cd "$(dirname "$0")" && pwd) RT="$HERE/../../lang/runtime" CC=${CC:-cc} SRC="$HERE/test_grounding_vector.c $RT/engram_cognition.c $RT/engram_reason.c $RT/engram_geometry.c $RT/engram_store.c $RT/engram_vindex.c" WARN="-std=c11 -Wall -Wextra" # engram_store.c declares emit_log as a WEAK symbol and null-checks it, which is # how a test links the store without the EL runtime. Darwin's ld does not resolve # an undefined weak symbol at static-link time, so it must be allowed explicitly. # (The pre-existing runners in this directory — run_verify_tests.sh among them — # do not do this and therefore fail to link on macOS. Unrelated to this change.) LDX="" [ "$(uname -s)" = "Darwin" ] && LDX="-Wl,-U,_emit_log" TMP=$(mktemp -d) echo "### PASS 1: PERF (optimised, un-sanitised) — functional gate" $CC $WARN -O2 -I"$RT" $SRC -lm -lpthread $LDX -o "$TMP/perf" "$TMP/perf" echo echo "### PASS 2: SAFETY (ASan/UBSan)" $CC $WARN -O1 -g -fsanitize=address,undefined -fno-omit-frame-pointer -I"$RT" $SRC -lm -lpthread $LDX -o "$TMP/safe" ASAN_OPTIONS=${ASAN_OPTIONS:-detect_leaks=0} UBSAN_OPTIONS=halt_on_error=1 "$TMP/safe"