jolt/test/chez
Yogthos 403c3f302f Clojure 1.13 parity: req!, checked-keys destructuring, keyword array maps
Bring the language up to the 1.13.0-alpha1 changes that apply off the JVM:

- req! (CLJ-2949): a get-variant that throws "Expected key: k" on a missing
  key, without nil-punning. The primitive behind checked destructuring.
- Checked-keys destructuring (CLJ-2961): :keys!/:syms!/:strs! bind and throw
  when a key is absent; keys after & are declared-only (required for the !
  variants, accepted otherwise) and create no binding.
- & is no longer a legal local binding in let/loop (CLJ-2954).
- Keyword-only array maps grow to 64 entries before going hash (was 8),
  across the literal, assoc, and transient paths, so the common keyword map
  keeps insertion order up to 64.

Skipped CLJ-2891 (JVM __init bytecode, JVM-only). 1.13 is still alpha, so
this tracks alpha1 and may shift. Regression tests in test/chez/unit.edn
(ahead of the JVM 1.12.5 the corpus certifies against). Seed re-minted.
2026-07-04 10:18:51 -04:00
..
alias-leak-app Fix seven more JVM divergences (rewrite-clj full suite) 2026-07-01 14:17:03 -04:00
build-app Source locations: reader positions, error locations, native stack traces (#218) 2026-06-26 02:14:34 +00:00
cts-app Vendor clojure-test-suite as a standing gate (make cts) 2026-07-02 03:46:57 -04:00
datareader-app Compile data readers that return code forms 2026-07-01 10:57:55 -04:00
bench-chez.ss Clean up codebase: rename stdlib layer, strip porting residue, fix tooling 2026-06-22 22:18:00 -04:00
clojure-test.clj clojure.test/are substitutes via clojure.template 2026-07-02 05:57:57 -04:00
corpus.edn Restore the :portability tags lost in the rebase 2026-07-02 14:46:13 -04:00
cts-known-failures.txt rand-nth follows the reference shape; refresh doc counts and the corpus floor 2026-07-02 14:46:13 -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 Numbers-style category dispatch for binary numeric ops 2026-07-02 06:41:45 -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 rand-nth follows the reference shape; refresh doc counts and the corpus floor 2026-07-02 14:46:13 -04:00
repl-reader-test.clj fix REPL treating a regex literal as an unbalanced form 2026-06-30 23:44:22 -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 Clojure 1.13 parity: req!, checked-keys destructuring, keyword array maps 2026-07-04 10:18:51 -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: ~3570 rows {:suite :label :expected :actual :portability}, 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 (see run-corpus.ss)
    
  • 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.

  • cts.sh — the vendored jank-lang/clojure-test-suite (vendor/clojure-test-suite, a per-core-fn clojure.test suite shared across Clojure dialects), run one namespace per joltc process (a hang or crash is contained) through the test/chez/cts-app project and cts-run runner. Per-namespace fail/error counts must exactly match the checked-in baseline test/chez/cts-known-failures.txt — a namespace doing worse fails the gate, and one doing better fails as stale until the baseline is updated in the same change. make cts; JOLT_CTS_NS=ns1,ns2 runs a subset verbosely, JOLT_CTS_WRITE_BASELINE=1 regenerates the baseline.

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.