corpus.edn :expected is now the value reference JVM Clojure produces, set by the new test/conformance/regen-corpus.clj (one JVM process, per-row thread watchdog). 167 rows moved to the JVM value: ratios (/ 1 2)=>1/2, doubles (double 3)=>3.0, shared-heap concurrency (the future/pmap/agent cases), clojure.math doubles. The JVM is the spec; jolt is measured against it. known-divergences.edn shrinks to the rows whose JVM value is an opaque host object that can't round-trip to source (Java arrays, transients, atoms, beans, proxies, chunks all print as #object[..@addr]) plus (fn* foo) and a few racy concurrency cases (:flaky). The zero-janet gate's allowlist becomes the set of host gaps vs the JVM spec (no Class/array/BigDecimal, :jolt reader, jolt's own printing). Math/clojure.math sqrt/pow/floor/trig now return doubles (Chez returns exact for exact args, e.g. (sqrt 9)=>3); JVM always returns a double. extract-corpus.janet no longer writes corpus.edn unless asked (the test runner imported it and was silently overwriting the JVM corpus with the spec sources' placeholder answers). The prelude parity gate is deleted — the zero-janet spine + certify.clj are the oracles. zero-janet 2678 (0 new divergences), certify 0 new / 0 stale, emit-test 330/330.
78 lines
3.8 KiB
Clojure
78 lines
3.8 KiB
Clojure
{:doc
|
|
"Rows of test/chez/corpus.edn whose :expected differs from reference JVM Clojure. The corpus is JVM-sourced (regen-corpus.clj), so this list is only the rows whose JVM value is an opaque host object that cannot round-trip to readable source — Java arrays, transients, atoms, beans, proxies, and chunks print as #object[..@addr] with a per-run identity — plus the (fn* foo) strictness case and a few racy concurrency cases (:flaky). For those the corpus keeps jolt's value. certify.clj gates on NEW (unlisted) divergences and STALE entries. Keyed by [suite label].",
|
|
:legend
|
|
{:numeric-model
|
|
"jolt is all-double: no Ratio/BigDecimal/float; (/ 1 2)=>0.5, 3.0 prints 3",
|
|
:concurrency-model
|
|
"Janet isolated-heap snapshot futures/agents/pmap; atoms snapshot, not shared",
|
|
:host-model
|
|
"no JVM host: classes->name strings, no Java arrays, type->symbol, *in* is a map, inline-impl extenders, duck-typed with-open close",
|
|
:reader-model
|
|
"jolt reader features (:jolt) + syntax-quote literal collapse (spec 2.4 S25); map source-order preserved",
|
|
:printer-model
|
|
"jolt printer renders transients/atoms/print-method overrides differently from JVM #object",
|
|
:strictness
|
|
"jolt is intentionally stricter: throws on odd assoc! args / defn with no param vector",
|
|
:impl-detail
|
|
"representation detail: syntax-quote yields a list? (JVM yields a Cons)"},
|
|
:entries
|
|
[{:suite "forms / fn",
|
|
:label "no param vector",
|
|
:category :strictness}
|
|
;; racy: agent send / future-cancel observe state that the action thread may or
|
|
;; may not have reached yet, so the JVM value is nondeterministic run-to-run.
|
|
{:suite "state / agents (synchronous shim)", :label "send applies",
|
|
:category :concurrency-model, :flaky true}
|
|
{:suite "state / agents (synchronous shim)", :label "send-off applies",
|
|
:category :concurrency-model, :flaky true}
|
|
{:suite "clojure.core / futures — predicates",
|
|
:label "cancel an in-flight future returns true",
|
|
:category :concurrency-model, :flaky true}
|
|
{:suite "clojure.core / futures — predicates",
|
|
:label "future-cancelled? after cancel",
|
|
:category :concurrency-model, :flaky true}
|
|
{:suite "io / cold tagged types via print-method",
|
|
:label "atom override fires nested",
|
|
:category :reader-model}
|
|
{:suite "io / cold tagged types via print-method",
|
|
:label "transient map",
|
|
:category :printer-model}
|
|
{:suite "io / cold tagged types via print-method",
|
|
:label "transient vector",
|
|
:category :printer-model}
|
|
{:suite "metadata / type hints",
|
|
:label "symbol hint -> :tag",
|
|
:category :host-model}
|
|
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
|
:label "bean is the map",
|
|
:category :host-model}
|
|
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
|
:label "proxy resolves nil",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "boolean-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "double-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "float-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "int-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "into-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "long-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "short-array",
|
|
:category :host-model}
|
|
{:suite "untested / array stubs (vectors + host buffers)",
|
|
:label "to-array",
|
|
:category :host-model}
|
|
{:suite "untested / chunk family (eager equivalents) + cat",
|
|
:label "chunk round-trip",
|
|
:category :host-model}]}
|