jolt/test/chez
Yogthos 59cfa5f53f conformance: audit + pin seq semantics (laziness, eagerness, chunking, type)
A 62-case jolt-vs-JVM probe across seq type identity, chunking
granularity, eagerness, and realization timing. Findings: the whole
producer family is lazy at construction (no eager bugs remain), and the
26 divergences fall into two classes that diverge by representation, not
value.

Lock in the laziness contract as certified corpus rows: construction=0
for keep/keep-indexed/map-indexed/distinct/partition-by/partition-all/
interpose/interleave/take-nth/reductions/tree-seq/replace, sequence
realizes 1, next realizes 2, rest realizes 1.

Pin the two accepted divergence classes (allowlisted, gate-guarded):
- seq-type-model: jolt reifies seqs as PersistentList/LazySeq vs JVM's
  Cons/Iterate/LongRange/Repeat/Cycle/ChunkedSeq/StringSeq/KeySeq/RSeq/
  ArraySeq/SubVector (jolt-aei7)
- chunking-model: unchunked, realizes one where JVM realizes a 32-chunk;
  mapcat/dedupe fully lazy at construction (jolt-mm6v)

known-divergences.edn gains both categories; SPEC.md documents the seq
semantics contract. Data/doc only, no re-mint. certify 0 new / 0 stale.
2026-06-28 03:22:47 -04:00
..
build-app Source locations: reader positions, error locations, native stack traces (#218) 2026-06-26 02:14:34 +00:00
bench-chez.ss Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00
corpus.edn conformance: audit + pin seq semantics (laziness, eagerness, chunking, type) 2026-06-28 03:22:47 -04:00
directlink-test.ss Fix direct-link crash on a non-fn var called as a function 2026-06-23 23:34:28 -04:00
ffi-binding-test.ss Group the JVM interop shims under host/chez/java/ 2026-06-25 18:35:44 -04:00
inline-test.ss Enable IR inlining: splice small defns at call sites (lever 1/4) 2026-06-23 17:43:13 -04:00
numeric-test.ss ^long is a 64-bit long: fast-path-with-fallback ops + logical unsigned shift 2026-06-27 16:04:19 -04:00
README.md Docs: Chez-only, drop the Janet-era references and obsolete migration notes 2026-06-22 09:05:35 -04:00
transient-test.ss Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00
unit.edn seq fns are lazy by default, like Clojure (LazySeq, not eager-headed) 2026-06-28 00:16:47 -04:00
values-test.ss Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00

Chez test harness

The correctness gate for jolt. Pure Chez (+ Clojure for the JVM oracle). Correctness is judged against the JVM-sourced conformance spec; the spec itself lives in test/conformance/ (see its SPEC.md). Run the whole gate with make test from the repo root.

The spec corpus

corpus.edn is the contract: ~2920 rows {:suite :label :expected :actual}, with :expected sourced from reference JVM Clojure by test/conformance/regen-corpus.clj. It is frozen (the canonical source) — add or change cases here, then re-source the answers with regen-corpus.clj and re-certify with test/conformance/certify.clj.

The gate runners (host/chez/)

  • run-corpus.ss — runs every corpus case through the spine (read → analyze → IR → emit → eval, all on Chez), comparing each result by value-equality against the JVM :expected. A known-fail allowlist covers cases jolt can't match because Chez has no JVM host (Java classes, arrays, BigDecimal, opaque host-object printers, …); the gate fails only on a NEW divergence or if the pass count drops below the floor.

    chez --script host/chez/run-corpus.ss
    JOLT_CORPUS_LIMIT=200 …            # every-Nth stride, fast iteration
    JOLT_CHEZ_ZJ_FLOOR=N …            # override the floor (default 2678)
    
  • run-unit.ss — host-specific unit cases (test/chez/unit.edn) that aren't in the JVM-portable corpus: dot-forms, java statics, io, reader, walk, vars/namespaces, refs. Each :expr is evaluated in-process and its printed value compared to a baked :expected (:throws asserts a raise).

  • selfcheck.sh — self-host fixpoint: bootstrap.ss rebuild byte-equals the checked-in seed (host/chez/seed/).

  • smoke.sh — real bin/joltc -e CLI smoke.

Other Chez tests

  • values-test.ss — the value model (nil/truthiness/collections). make values.
  • bench-chez.ss — compute bench through the pipeline (opt-in; not in the gate).

All runners assume chez on PATH.