Clean up codebase: rename stdlib layer, strip porting residue, fix tooling
Rename src/jolt -> stdlib (the runtime-loaded layer; jolt-core stays the seed-baked layer) and update the loader / emit-image / doc paths. Drop dead code: the spike/ experiments, the duplicate clojuredocs-export.edn (json moves to tools/), the Janet-era jolt.http binding, and the orphaned persistent_vector.clj whose ns/path didn't even match. Strip porting residue from comments and docstrings across host/chez, jolt-core, stdlib, tests, and docs: internal issue ids, "Phase N" markers, and the "vs Janet" historical exposition, leaving present-tense descriptions and the real JVM-Clojure semantic contrasts. Same pass over the corpus suite labels. The seed is unchanged (docstrings/comments aren't emitted), so the self-host fixpoint and corpus are untouched. Port tools/spec_coverage.py off the dead janet probe to bin/joltc and regenerate coverage.md; drop the dead :host/janet rule from certify.clj and regenerate the conformance profile. Add docs/host-interop.md (the JVM shims and how to register your own host class from a library) and a writing-style note in CLAUDE.md. Stabilize the four racy concurrency corpus cases (future-cancel and agent send/send-off): give the future a sleeping body and the agent a slow action, so cancel reliably catches an in-flight future and deref reliably reads the pre-update snapshot. They certify deterministically now, so drop their :flaky allowlist entries and the orphaned legend.
This commit is contained in:
parent
c18f8087f0
commit
33eff7c7d8
112 changed files with 970 additions and 1621 deletions
|
|
@ -50,10 +50,10 @@ clojure -M test/conformance/certify.clj test/chez/corpus.edn --edn /tmp/report.e
|
|||
|
||||
## Current state
|
||||
|
||||
Of ~2487 vanilla-certifiable rows, **>2410 match reference Clojure exactly**; the
|
||||
~70 divergences are all classified (deliberate deltas + 4 tracked bugs). The corpus
|
||||
is trustworthy as a spec, with the host-specific deltas made explicit rather than
|
||||
hidden.
|
||||
Of ~2740 vanilla-certifiable rows, **>2730 match reference Clojure exactly**; the
|
||||
handful of divergences are all classified (deliberate deltas plus a few tracked
|
||||
bugs). The corpus is trustworthy as a spec, with the host-specific deltas made
|
||||
explicit rather than hidden.
|
||||
|
||||
## Adding / changing cases
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ the canonical, frozen contract**: it is what every runtime consumes, what
|
|||
Historically every `:expected` was hand-written. `certify.clj` removes that
|
||||
weakness: it evaluates every `:actual` (and `:expected`) on **JVM Clojure** in a
|
||||
fresh `user` namespace and checks jolt's `:expected` against what real Clojure
|
||||
produces. Of ~2740 vanilla-certifiable rows, **>2660 match reference Clojure
|
||||
produces. Of ~2740 vanilla-certifiable rows, **>2730 match reference Clojure
|
||||
exactly**. The rest are classified (see below) — none are silently wrong.
|
||||
|
||||
```sh
|
||||
|
|
@ -62,7 +62,7 @@ each **non-portable** case by the feature it requires. Cases *not* in the profil
|
|||
are **portable** — they must pass on any faithful Clojure.
|
||||
|
||||
A runtime's **conformance level** = portable cases + the feature families it
|
||||
implements. Current profile (≈2670 portable, ≈249 non-portable):
|
||||
implements. Current profile (≈2735 portable, ≈167 non-portable):
|
||||
|
||||
| Feature | Meaning |
|
||||
|---------|---------|
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
;; certify.clj (jolt-xsfe) — certify the jolt corpus against reference JVM Clojure.
|
||||
;; certify.clj — certify the jolt corpus against reference JVM Clojure.
|
||||
;;
|
||||
;; The corpus (test/chez/corpus.edn) carries hand-written :expected values. This
|
||||
;; script runs each row's :actual and :expected through REAL JVM Clojure and checks
|
||||
|
|
@ -154,7 +154,6 @@
|
|||
(defn jvm-error-feature [actual]
|
||||
(let [a (str/lower-case actual)]
|
||||
(cond
|
||||
(re-find #"janet" a) :host/janet
|
||||
(re-find #"chan|>!|<!|go-loop|\(go |alts!|core\.async" a) :async/core-async
|
||||
(re-find #"load-string|\beval\b|read-string.*eval" a) :runtime/eval
|
||||
(re-find #"-array|into-array|to-array|aget|aset|aclone|alength" a) :host/arrays
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{: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].",
|
||||
"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",
|
||||
:concurrency-model
|
||||
"Janet isolated-heap snapshot futures/agents/pmap; atoms snapshot, not shared",
|
||||
:host-model
|
||||
"no JVM host: classes->name strings, type->symbol, *in* is a map, inline-impl extenders, duck-typed with-open close",
|
||||
:reader-model
|
||||
|
|
@ -19,18 +17,6 @@
|
|||
[{: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}
|
||||
|
|
|
|||
|
|
@ -1,73 +1,53 @@
|
|||
{:doc
|
||||
"Conformance profile for test/chez/corpus.edn, generated by certify.clj. Each entry is a NON-portable case (keyed by [suite label]) and the host feature(s) it requires. Cases NOT listed are portable — they pass on any faithful Clojure. A runtime's conformance LEVEL = portable + the feature families it implements. See SPEC.md.",
|
||||
:clojure-version "1.12.5",
|
||||
:portable-count 2674,
|
||||
:non-portable-count 246,
|
||||
:portable-count 2735,
|
||||
:non-portable-count 167,
|
||||
:feature-counts
|
||||
{:concurrency/snapshot 5,
|
||||
:host/arrays 12,
|
||||
:host/janet 16,
|
||||
:host/jvm-interop 174,
|
||||
:impl/representation 1,
|
||||
:numerics/double-only 17,
|
||||
{:host/arrays 10,
|
||||
:host/jvm-interop 149,
|
||||
:perf/unbounded 1,
|
||||
:printer/jolt 4,
|
||||
:reader/jolt 13,
|
||||
:strictness/jolt 3},
|
||||
:printer/jolt 2,
|
||||
:reader/jolt 4,
|
||||
:strictness/jolt 1},
|
||||
:entries
|
||||
[{:suite "*ns* / identity & printing",
|
||||
:label "tracks in-ns",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.core / futures — predicates",
|
||||
:label "cancel an in-flight future returns true",
|
||||
:bucket :divergent,
|
||||
:features [:concurrency/snapshot]}
|
||||
{:suite "clojure.core / futures — snapshot (copy) semantics",
|
||||
:label "captured atom is snapshotted, not shared",
|
||||
:bucket :divergent,
|
||||
:features [:concurrency/snapshot]}
|
||||
{:suite "clojure.core / leaf batch (complement fnil munge etc.)",
|
||||
:label "bigdec",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "clojure.core / leaf batch (complement fnil munge etc.)",
|
||||
:label "supers empty set",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.core / pmap family",
|
||||
:label "snapshot semantics",
|
||||
:bucket :divergent,
|
||||
:features [:concurrency/snapshot]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "PI",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "floor",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "pow",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "round",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "signum",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "sqrt",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "tan of 0",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "clojure.math (jolt-h79)",
|
||||
{:suite "clojure.math",
|
||||
:label "to-radians",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
|
|
@ -91,11 +71,6 @@
|
|||
:label "try multi-body last",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite
|
||||
"conformance / native-op parity (compile emits janet ops at guarded arities)",
|
||||
:label "native unary div",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "conformance / try / catch",
|
||||
:label "ex-data",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -108,14 +83,6 @@
|
|||
:label "try catch",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "core / extenders",
|
||||
:label "lists extended type",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "core / extenders",
|
||||
:label "seq of tags",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "core / with-open",
|
||||
:label "binding visible",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -124,10 +91,6 @@
|
|||
:label "body result",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "core / with-open",
|
||||
:label "close on throw",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "core / with-open",
|
||||
:label "close runs",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -220,22 +183,6 @@
|
|||
:label "global underive",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "host-interop / bake env scrub",
|
||||
:label "full snapshot filtered to the allowlist",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "host-interop / bake env scrub",
|
||||
:label "listed name still reads",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "host-interop / bake env scrub",
|
||||
:label "unlisted name reads nil under the allowlist",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "host-interop / class tokens & readers",
|
||||
:label "class name evaluates to canonical string",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "host-interop / class tokens & readers",
|
||||
:label "dispatch-only class name",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -256,10 +203,6 @@
|
|||
:label "HashMap put + size",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "host-interop / exception + HashMap shims",
|
||||
:label "getMessage on a thrown string",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "host-interop / migratus class shims",
|
||||
:label "Timestamp is millis",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -332,10 +275,6 @@
|
|||
:label "String/valueOf nil",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "interop / StringReader & StringBuilder",
|
||||
:label "line-seq over file reader",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / StringReader & StringBuilder",
|
||||
:label "mark/reset",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -360,30 +299,6 @@
|
|||
:label "method with args",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "janet.os/clock is a number",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "janet.string module fn",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "jolt vector crosses as a janet table",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "module fn janet.<mod>/<name>",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "root builtin janet/<name>",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / janet bridge",
|
||||
:label "root builtin janet/type",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / java.time shims",
|
||||
:label "Instant instance",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -424,30 +339,6 @@
|
|||
:label "withLocale chain",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "interop / jolt.interop",
|
||||
:label "janet-type keyword",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / jolt.interop",
|
||||
:label "janet-type list",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / jolt.interop",
|
||||
:label "janet-type number",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / jolt.interop",
|
||||
:label "janet-type quoted list",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "interop / jolt.interop",
|
||||
:label "janet-type string",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
{:suite "io / *in* + with-in-str + read-line",
|
||||
:label "*in* is bound",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "io / cold tagged types via print-method",
|
||||
:label "atom override fires nested",
|
||||
:bucket :divergent,
|
||||
|
|
@ -480,18 +371,6 @@
|
|||
:label "StringWriter accumulates",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "io / print-method multimethod",
|
||||
:label "defmethod fires nested in a map",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "io / print-method multimethod",
|
||||
:label "defmethod fires through prn",
|
||||
:bucket :divergent,
|
||||
:features [:printer/jolt]}
|
||||
{:suite "io / print-method multimethod",
|
||||
:label "defmethod overrides a record, top level",
|
||||
:bucket :divergent,
|
||||
:features [:printer/jolt]}
|
||||
{:suite "io / print-method multimethod",
|
||||
:label "direct builtin override",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -507,7 +386,7 @@
|
|||
{:suite "io / slurp, spit, printf, flush (host-classified)",
|
||||
:label "file-seq finds files",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/janet]}
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "macros / core-overlay",
|
||||
:label "assert message",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -520,22 +399,10 @@
|
|||
:label "condp no match",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "macros / defmacro",
|
||||
:label "macroexpand-1",
|
||||
:bucket :divergent,
|
||||
:features [:impl/representation]}
|
||||
{:suite "macros / time, with-redefs, macroexpand",
|
||||
:label "with-redefs restores on throw",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "maps / literal construction",
|
||||
:label "source order through syntax-quote",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "metadata / def metadata",
|
||||
:label "^Type tag on var",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "metadata / type hints",
|
||||
:label "symbol hint -> :tag",
|
||||
:bucket :divergent,
|
||||
|
|
@ -568,42 +435,6 @@
|
|||
:label "require :as registers the alias",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "numbers / arithmetic",
|
||||
:label "divide to fraction",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / literal syntax",
|
||||
:label "bigdec int M",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / literal syntax",
|
||||
:label "bigdec suffix M",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / literal syntax",
|
||||
:label "neg ratio",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / literal syntax",
|
||||
:label "ratio -> double",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / literal syntax",
|
||||
:label "ratio 3/4",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / printing of inf & nan",
|
||||
:label "inf inside coll",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "numbers / printing of inf & nan",
|
||||
:label "pr-str Infinity",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "predicates / compare, type, any? (stage 3)",
|
||||
:label "type of record",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "predicates / overlay-migrated",
|
||||
:label "keyword-identical?",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -620,54 +451,14 @@
|
|||
:label "undefined?",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "predicates / tagged-value (Phase 4)",
|
||||
{:suite "predicates / tagged-value",
|
||||
:label "atom? no",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "predicates / tagged-value (Phase 4)",
|
||||
{:suite "predicates / tagged-value",
|
||||
:label "atom? yes",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "predicates / tagged-value (Phase 4)",
|
||||
:label "chunked-seq? always false",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "reader / dispatch & sugar",
|
||||
:label "reader cond :jolt",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / dispatch & sugar",
|
||||
:label "reader cond no match",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / dispatch & sugar",
|
||||
:label "reader cond splice",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / dispatch & sugar",
|
||||
:label "reader cond splice no match",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / dispatch & sugar",
|
||||
:label "reader conditional",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / scalar literals",
|
||||
:label "bigdec suffix M",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "reader / scalar literals",
|
||||
:label "ratio -> double",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "reader / syntax-quote literal collapse (spec 2.4 S25)",
|
||||
:label "bool nested",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "reader / syntax-quote literal collapse (spec 2.4 S25)",
|
||||
:label "nil nested",
|
||||
:bucket :divergent,
|
||||
:features [:reader/jolt]}
|
||||
{:suite "regex / Pattern statics & String regex methods",
|
||||
:label "Pattern/MULTILINE ^",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -708,19 +499,19 @@
|
|||
:label "re-pattern is regex?",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "set / nil element (jolt-bn2p)",
|
||||
{:suite "set / nil element",
|
||||
:label "transient conj! nil",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "set / nil element (jolt-bn2p)",
|
||||
{:suite "set / nil element",
|
||||
:label "transient contains? nil",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "set / nil element (jolt-bn2p)",
|
||||
{:suite "set / nil element",
|
||||
:label "transient disj! nil cnt",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "set / nil element (jolt-bn2p)",
|
||||
{:suite "set / nil element",
|
||||
:label "transient disj! removes",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
|
|
@ -744,14 +535,6 @@
|
|||
:label "sorted-set? true",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "state / agents (synchronous shim)",
|
||||
:label "send applies",
|
||||
:bucket :divergent,
|
||||
:features [:concurrency/snapshot]}
|
||||
{:suite "state / agents (synchronous shim)",
|
||||
:label "send-off applies",
|
||||
:bucket :divergent,
|
||||
:features [:concurrency/snapshot]}
|
||||
{:suite "state / atoms",
|
||||
:label "atom? on non-atom",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -764,14 +547,6 @@
|
|||
:label "promise undelivered",
|
||||
:bucket :timeout,
|
||||
:features [:perf/unbounded]}
|
||||
{:suite "transient / assoc! odd args throw",
|
||||
:label "map dangling key",
|
||||
:bucket :throws-mismatch,
|
||||
:features [:strictness/jolt]}
|
||||
{:suite "transient / assoc! odd args throw",
|
||||
:label "vector dangling",
|
||||
:bucket :throws-mismatch,
|
||||
:features [:strictness/jolt]}
|
||||
{:suite "transient / set",
|
||||
:label "conj! dedups",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -804,22 +579,6 @@
|
|||
:label "bean is the map",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
||||
:label "class keyword",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
||||
:label "class number",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
||||
:label "class string",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
||||
:label "definterface defines",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / JVM-shape stubs (documented jolt behavior)",
|
||||
:label "enumeration-seq",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -848,10 +607,6 @@
|
|||
:label "update-proxy",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "aclone vec",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/arrays]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "aset-boolean",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -884,58 +639,10 @@
|
|||
:label "aset-short",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/arrays]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "boolean-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "double-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "float-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "int-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "into-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "long-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "make-array",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/arrays]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "short-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / array stubs (vectors + host buffers)",
|
||||
:label "to-array",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / chunk family (eager equivalents) + cat",
|
||||
:label "chunk round-trip",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / ns + REPL machinery",
|
||||
:label "*in* bound",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / ns + REPL machinery",
|
||||
:label "ns-imports empty user",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / primed + division + bit ops",
|
||||
:label "/ ratio-as-double",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "untested / protocols: extend + extends?",
|
||||
:label "extend registers",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -964,22 +671,6 @@
|
|||
:label "chars first",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / typed coercion views",
|
||||
:label "double",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "untested / typed coercion views",
|
||||
:label "doubles",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / typed coercion views",
|
||||
:label "float",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "untested / typed coercion views",
|
||||
:label "floats",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / typed coercion views",
|
||||
:label "ints",
|
||||
:bucket :jvm-error,
|
||||
|
|
@ -991,16 +682,4 @@
|
|||
{:suite "untested / typed coercion views",
|
||||
:label "shorts",
|
||||
:bucket :jvm-error,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / unchecked-* are plain ops",
|
||||
:label "unchecked-char",
|
||||
:bucket :divergent,
|
||||
:features [:host/jvm-interop]}
|
||||
{:suite "untested / unchecked-* are plain ops",
|
||||
:label "unchecked-double",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}
|
||||
{:suite "untested / unchecked-* are plain ops",
|
||||
:label "unchecked-float",
|
||||
:bucket :divergent,
|
||||
:features [:numerics/double-only]}]}
|
||||
:features [:host/jvm-interop]}]}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
(clojure.core/refer-clojure)
|
||||
;; make the stdlib namespaces a corpus case may reference by qualified name
|
||||
;; resolvable (clojure.math/floor etc.) so they evaluate to the real JVM
|
||||
;; value instead of throwing Unable-to-resolve (-> kept Janet value).
|
||||
;; value instead of throwing Unable-to-resolve (-> existing :expected kept).
|
||||
(doseq [n '[clojure.string clojure.set clojure.walk clojure.edn
|
||||
clojure.math clojure.pprint]]
|
||||
(try (require n) (catch Throwable _ nil)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue