Contract fixes from the baseline audit; every residual suite failure traced
Auditing the remaining cts baseline for R7 exposed real contract gaps hiding among the model residue — all fixed to reference behavior: - stale no-ratio-era stubs: numerator/denominator now work over jolt's exact rationals (non-ratio is the Ratio cast failure); rational? includes decimals - casts and pending: peek/pop demand an IPersistentStack (pop nil is nil), realized? demands an IPending (a plain list/range throws), transient demands an editable COLLECTION (non-colls throw; the RFC 0003 sorted/list/seq superset keeps the copy-on-write fallback), empty on a plain record throws - nil and empties: (nth nil i) is nil, (nth nil i d) is d, a nil index is NPE, keys/vals of anything empty are nil, (conj nil) is nil - lookups: contains? on a string is index-only (other keys IAE), get on an array is lenient (nth still throws), a VECTOR invocation has nth semantics (([1 2] 5) throws — call position and jolt-invoke both) - into only transients editable collections; a PersistentQueue/sorted target folds through conj (RT's IEditableCollection split) - numbers: number?/num accept BigDecimal, quot/rem throw on an Infinite/NaN quotient, even?/odd? demand integers - ordering: keywords compare namespace-first with nil first (Symbol.compareTo) - misc: run! honors reduced, eval self-evaluates non-form values, intern demands an existing namespace, counted? excludes strings, seqable? includes arrays, shuffle rejects maps, sort-by rejects a collection comparator, when-let demands one binding pair, case*/deftype*/letfn*/reify*/& are special symbols Two mis-certified corpus rows fixed (they threw on the JVM too and hid in the tolerated bucket): a raw \d string escape and duplicate literal map keys. SPEC.md gains the baseline-traceability section: every one of the 146 remaining suite failures maps to a documented divergence (integer-box, no-single-float, RFC 0003 transients, seq/chunking model, stm-refs, parse-uuid strictness, vec-array adoption). cts baseline 5955 -> 6042 pass, 5 errors, 30 namespaces. 9 JVM-certified corpus rows.
This commit is contained in:
parent
3fb8082802
commit
ce8e89ca86
19 changed files with 728 additions and 578 deletions
|
|
@ -205,3 +205,40 @@ corpus`.
|
|||
deliberate delta (classify it in `known-divergences.edn`).
|
||||
- **Refresh the profile**: re-run with `--profile test/conformance/profile.edn`.
|
||||
- **Re-floor the runtime gate** when parity rises (`host/chez/run-corpus.ss`).
|
||||
|
||||
## clojure-test-suite baseline traceability
|
||||
|
||||
Every residual entry in `test/chez/cts-known-failures.txt` traces to one
|
||||
documented model divergence — nothing in the baseline is an unexplained bug:
|
||||
|
||||
- `:integer-box-model` (this file, above): every `big-int?`/`instance?
|
||||
Byte…BigInt` class check, the overflow-throw rows (`(+ max-long 1)` is a
|
||||
bignum, not ArithmeticException — abs/inc/dec/minus/plus/star/quot/rem/mod/
|
||||
bit-set and the `+'`/`*'` promotion-identity namespaces), boxed-identity
|
||||
rows (`(identical? (Boolean. "true") true)`, `(= x x)` on a boxed NaN — jolt
|
||||
numbers are immediates, there is no box to distinguish), and `num`'s
|
||||
primitive-overload reflection rows.
|
||||
- **no single float** (Narrow integer types, above): `(float Double/MIN_VALUE)`
|
||||
keeps the double value instead of rounding to 0.0f; `(double? (float x))`
|
||||
is true.
|
||||
- **RFC 0003 transients**: `(transient sorted/list/lazy-seq)` succeeds through
|
||||
the copy-on-write fallback (a deliberate superset; non-collections now throw
|
||||
like the JVM), and double-transient is idempotent rather than throwing.
|
||||
- `:seq-type-model`/`:chunking-model` (Seq semantics, above): `realized?` on
|
||||
the rest of a realized chain (a plain seq cell on jolt, a cached LazySeq on
|
||||
the JVM), `p/lazy-seq?` on forced rest chains, and chunk-granularity
|
||||
realization counts (lazy-seq namespace).
|
||||
- **stm-refs** (`coverage.md`): the `(ref …)`/`dosync` sections of the watch
|
||||
namespaces (add-watch/remove-watch) — refs are out of scope pending the
|
||||
concurrency design note.
|
||||
- **parse-uuid strictness** (spec §9, parse-uuid S3): jolt is deliberately
|
||||
strict where the reference's java.util.UUID accepts non-canonical forms
|
||||
like `"0-0-0-0-0"`.
|
||||
- **vec of an array copies**: the reference ADOPTS an Object array (mutating
|
||||
the array mutates the vector); jolt copies — immutable semantics win over
|
||||
the implementation leak (`vec` namespace, one row).
|
||||
- **eval of JVM shapes** (`rand-nth`/`eval` residue): rows needing JVM-only
|
||||
evaluation shapes (e.g. evaluating a Java array literal).
|
||||
|
||||
A future change that makes any of these rows pass will fail the cts gate as
|
||||
STALE, forcing this section and the baseline to be updated together.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue