From 3e35975ee9120042baa0e8fe2bb2d52311204e84 Mon Sep 17 00:00:00 2001 From: eunhhu Date: Fri, 25 Sep 2026 11:05:51 +0100 Subject: Compile v0a programs to verified Pure modules aup check/build parse states, key inputs, views and handlers (with if/else and else-if), resolve names, generate forward-only stack code and encode a Pure module v1 deterministically. Diagnostics carry file:line:column. make check loads every module with Pure's verifier, checks determinism, 20 diagnostics and accepted forms, replacement by name, 600 generated programs and damaged sources (every emitted module verifies), and replays random event scripts against the workbench Zig engine: 16,667 snapshots across counter, toggle, charge, else-if and fault programs matched, including 921 failed events. The sanitizer-built compiler passes the same checks. --- tests/oracle/faults.aup | 22 ++++++++++++++++++++++ tests/oracle/faults.pure | 19 +++++++++++++++++++ tests/oracle/steps.pure | 23 +++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 tests/oracle/faults.aup create mode 100644 tests/oracle/faults.pure create mode 100644 tests/oracle/steps.pure (limited to 'tests/oracle') diff --git a/tests/oracle/faults.aup b/tests/oracle/faults.aup new file mode 100644 index 0000000..cb91f17 --- /dev/null +++ b/tests/oracle/faults.aup @@ -0,0 +1,22 @@ +# Each input fails on some presses; a failed event changes nothing. +state q = 1 +state r = 0 +state s = 5 +input divide = key KeyD +input grow = key KeyG +input bound = key KeyB +view shown = r + +on divide.down { + r = r + 1 + q = 10 / (q - 1) +} + +on grow.down { + s = s * 1e200 +} + +on bound.down { + r = r + 1 + s = clamp(s, r, 3) +} diff --git a/tests/oracle/faults.pure b/tests/oracle/faults.pure new file mode 100644 index 0000000..598c853 --- /dev/null +++ b/tests/oracle/faults.pure @@ -0,0 +1,19 @@ +# Each input fails on some presses; a failed event changes nothing. +state q = 1 +state r = 0 +state s = 5 +input divide = KeyD +input grow = KeyG +input bound = KeyB +text shown(0, 0, r, "r") +on divide.down { + r = r + 1 + q = 10 / (q - 1) +} +on grow.down { + s = s * 1e200 +} +on bound.down { + r = r + 1 + s = clamp(s, r, 3) +} diff --git a/tests/oracle/steps.pure b/tests/oracle/steps.pure new file mode 100644 index 0000000..3c09dbb --- /dev/null +++ b/tests/oracle/steps.pure @@ -0,0 +1,23 @@ +# The workbench has no else; the aup else-if chain is written as exclusive ifs. +state level = 0 +state band = 0 +input up = ArrowUp +input down = ArrowDown +text shown(0, 0, band, "band") +on up.down { + level = level + 1 +} +on down.down { + level = level - 1 +} +on frame { + if level > 2 { + band = 2 + } + if level <= 2 && level > 0 { + band = 1 + } + if level <= 0 { + band = 0 + } +} -- cgit v1.2.3