jolt unifies every integer as one exact-integer type, so (byte/short/int n) report Long not Byte/Short/Integer and instance? Byte is false. Confirmed substrate-inherent: (byte 5) is a Chez immediate identical? to 5 (nothing to tag, numbers carry no metadata), and arithmetic compiles to a raw Chez + that a boxed narrow type would crash. Value/arithmetic/equality are correct. Certify the value-correctness (= to plain int, arithmetic promotes, is a Number) and pin the class/instance? divergence under a new :integer-box-model category. Data/doc only.
64 lines
5.3 KiB
Clojure
64 lines
5.3 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. For that the corpus keeps jolt's value. certify.clj gates on NEW (unlisted) divergences and STALE entries. Keyed by [suite label].",
|
|
:legend
|
|
{:numeric-model
|
|
"jolt has a numeric tower (exact integer / Ratio / double); no BigDecimal",
|
|
:host-model
|
|
"no JVM host: classes->name strings, 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)",
|
|
:seq-type-model
|
|
"jolt models every seq as PersistentList (eager) or LazySeq (deferred); JVM reifies a specialized class per producer (Cons/Iterate/LongRange/Repeat/Cycle/ChunkedSeq/StringSeq/KeySeq/RSeq/ArraySeq/SubVector). Values and laziness are correct, only (class …) differs. jolt-aei7",
|
|
:chunking-model
|
|
"jolt seqs are unchunked: forcing one element realizes one (JVM realizes a ~32-element chunk), and mapcat/dedupe realize 0 at construction where JVM forces the first chunk — jolt is a finer-grained lazy superset. jolt-mm6v",
|
|
:integer-box-model
|
|
"jolt unifies every integer as one exact-integer type. A Chez fixnum is an immediate identical to the plain integer (no distinct identity to tag, no metadata on numbers), so (byte/short/int n) report Long, not Byte/Short/Integer. Value/arithmetic/equality are correct; a faithful narrow box would crash raw compiled (+ …) or de-optimize all arithmetic. jolt-k9sw"},
|
|
:entries
|
|
[{:suite "forms / fn",
|
|
:label "no param vector",
|
|
:category :strictness}
|
|
{: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 "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 / chunk family (eager equivalents) + cat",
|
|
:label "chunk round-trip",
|
|
:category :host-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "cons over a vector", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "iterate", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "range", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "repeat", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "cycle", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "vector seq", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "string seq", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "keys", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "rseq", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "sort", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "subvec", :category :seq-type-model}
|
|
{:suite "seq-type-model / specialized seq classes collapse", :label "drop over a vector", :category :seq-type-model}
|
|
{:suite "chunking-model / unchunked realization granularity", :label "first over a vector realizes one, not a chunk", :category :chunking-model}
|
|
{:suite "chunking-model / unchunked realization granularity", :label "nth 0 over a vector realizes one", :category :chunking-model}
|
|
{:suite "chunking-model / unchunked realization granularity", :label "mapcat is fully lazy at construction", :category :chunking-model}
|
|
{:suite "chunking-model / unchunked realization granularity", :label "dedupe is fully lazy at construction", :category :chunking-model}
|
|
{:suite "integer-box-model / narrow int class collapses to Long", :label "byte class", :category :integer-box-model}
|
|
{:suite "integer-box-model / narrow int class collapses to Long", :label "short class", :category :integer-box-model}
|
|
{:suite "integer-box-model / narrow int class collapses to Long", :label "int class", :category :integer-box-model}
|
|
{:suite "integer-box-model / narrow int class collapses to Long", :label "instance? Byte is false", :category :integer-box-model}
|
|
{:suite "integer-box-model / narrow int class collapses to Long", :label "instance? Long is true", :category :integer-box-model}]}
|