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. |
||
|---|---|---|
| .. | ||
| alias-leak-app | ||
| build-app | ||
| cts-app | ||
| datareader-app | ||
| bench-chez.ss | ||
| clojure-test.clj | ||
| corpus.edn | ||
| cts-known-failures.txt | ||
| directlink-test.ss | ||
| ffi-binding-test.ss | ||
| inline-test.ss | ||
| numeric-test.ss | ||
| README.md | ||
| repl-reader-test.clj | ||
| transient-test.ss | ||
| unit.edn | ||
| values-test.ss | ||
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. Aknown-failallowlist 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:expris evaluated in-process and its printed value compared to a baked:expected(:throwsasserts a raise). -
selfcheck.sh— self-host fixpoint:bootstrap.ssrebuild byte-equals the checked-in seed (host/chez/seed/). -
smoke.sh— realbin/joltc -eCLI 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 perjoltcprocess (a hang or crash is contained) through thetest/chez/cts-appproject andcts-runrunner. Per-namespace fail/error counts must exactly match the checked-in baselinetest/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,ns2runs a subset verbosely,JOLT_CTS_WRITE_BASELINE=1regenerates 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.