Completes the JVM long-compatibility gap so clojure.test.check (and the property-based suites built on it, e.g. data.codec) run on jolt. A ^long is 64-bit but a Chez fixnum is only 61-bit, so the backend's fast fx comparison / quot / min / max / inc / dec ops raised on a full-width long (one from the PRNG or wrapping arithmetic). They now go through the jolt-l* macros (host/chez/seq.ss): the fx fast path when the operands ARE fixnums, the generic op otherwise — so e.g. ((fn [^long a ^long b] (< a b)) Long/MAX 1) is false, not an error. Arithmetic +/-/* keep the raw fx ops (under *unchecked-math* they're already the wrapping unchecked-*). Also fixes unsigned-bit-shift-right: it was an arithmetic (sign-propagating) shift, now a logical shift over the 64-bit two's-complement window, so (unsigned-bit-shift-right -1 1) is 2^63-1 like the JVM. Result: test.check 1.1.3 loads and runs (generators, quick-check, shrinking); data.codec's base64 property suite passes (12/12 defspecs; the 2 deftests check clojure.lang.IFn$OLLOL, a JVM primitive-fn interface, N/A). Both added to docs/libraries.md + the site. re-mint (backend/seed). make test green (+3 corpus rows, 0 new divergences, numeric gate updated to the jolt-l* ops), shakesmoke byte-identical.
4.5 KiB
4.5 KiB
Clojure libraries known to work with Jolt
Libraries confirmed to load and pass their conformance checks on Jolt. A library listed here works. See the examples, e.g. the ring-app example.
- aero — EDN configuration with tag literals
(
#ref/#env/#or/#profile/#long/…) - config — environment configuration
- Selmer — Django-style templates
- medley — collection utilities
- cuerdas — string manipulation
- ring-core — via
:deps/root "ring-core", on the ring-app example - ring-codec — URL/form encoding
- ring-defaults — the standard middleware stack (params, static resources + content-type, session, security headers); its session/CSRF crypto comes from jolt-lang/jolt-crypto (OpenSSL)
- reitit-core — data-driven routing; the
reitit.TrieJava class is mirrored by jolt-lang/router. - integrant — data-driven system
configuration (
#ig/ref), with its dependency and meta-merge deps - honeysql — SQL formatter and helpers
- clojure.jdbc — as
jolt-lang/db's
jdbc.core, over the built-in SQLite access (libsqlite3 via Chez's FFI) - next.jdbc — a compatibility layer in
jolt-lang/db over
jdbc.core - tools.logging — runs verbatim over a
native
clojure.tools.logging.implstderr backend - migratus — database migrations over the next.jdbc layer
- malli — data schema validation, on the malli-app example.
- markdown-clj — Markdown → HTML, on the markdown-app example
- hiccup — HTML from Clojure data, on the hiccup-app example
- clojure.data.json — JSON reading and writing
- clojure.spec.alpha — data specs
- core.match — pattern matching.
- core.cache — caching (Basic/FIFO/LRU/ LU/TTL/Soft + the wrapped atom API), over data.priority-map.
- core.memoize — function memoization over core.cache.
- core.async — CSP channels and
goblocks (<!/>!/alts!,pipeline,mult/mix/pub/sub) on real OS threads. - core.logic — relational logic programming
(unification,
run/fresh/conde, finite domains). - math.combinatorics — permutations, combinations, subsets, selections, cartesian products, partitions.
- core.contracts — programming by
contract (
contract/with-constraints/provide), over core.unify. - data.zip — zipper navigation, including
clojure.data.zip.xml; XML parsing via jolt-lang/xml (which now shipsclojure.xml/parse). - data.csv — reading and writing CSV.
- data.codec — base64 encode/decode over byte arrays.
- test.check — property-based testing
(generators,
quick-check, shrinking). - tick — date/time over Jolt's
java.time;#time/…literals viatime-literals. - transit-jolt — Transit (JSON) read/write