Bring the docs in line with the actual implementation now that Chez is the sole substrate. Deleted the migration/spike/handoff artifacts that only documented the Janet era or the port effort: the port plan, phase-0 and foundational-runtime spike writeups (+ the stray root-level copy), the self-hosting design notes, the architecture-refactor plan, and spike/chez/RESULTS.md. Rewrote the current reference docs against the Chez facts: building-and-deps and tools-deps (no jpm/build step — bin/joltc off the checked-in seed, deps via jolt.deps into ~/.jolt/gitlibs), libraries (SQLite is built-in jdbc.core over libsqlite3, not a Janet driver), the conformance/spec test-flow docs (the Chez corpus runner + certify, no .janet harnesses), and the transient / type-hint / seed-overlay design notes (Chez representations: mutable transients, flat copy-on-write vectors, HAMT maps, the seed/overlay twin). Fixed the README collections line (vectors aren't 32-way tries) and added the ffi/transient gate targets. rfc 0001's numerics open-question is resolved (the Scheme tower). Renamed the built-in HTTP adapter to jolt.http.server only (dropped the ring-janet.adapter alias — a Janet-era name).
41 lines
2 KiB
Markdown
41 lines
2 KiB
Markdown
# 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.
|