jolt/test
Yogthos a0c9696900 feat: persistent singly-linked lists with O(1) conj/cons prepend
Round 3 of the persistent-collections work. Lists were immutable Janet arrays,
so conj/cons-prepend was an O(n) copy (O(n^2) to build a list) — a large perf
gap vs Clojure's PersistentList.

Add src/jolt/plist.janet: an immutable cons-cell list (first/rest/count), same
algorithm as Clojure/CLJS/jank PersistentList. conj/cons onto a list now creates
an O(1) node that shares the existing list as its tail (no copy), with a cached
O(1) count. Repeated conj is O(n) total instead of O(n^2).

Hooked plist through first/rest/next/seq/count/peek/pop/nth/empty/empty?, the
predicates (list?/seq?/coll?/sequential?), realize-for-iteration, =, coll->cells
(concat/lazy), both printers, destructuring, and instance? tags. (list ...) and
quoted lists stay arrays; only conj/cons introduce plist nodes, so the surface
and risk stay small.

Verified: reduce-conj of 200k elements runs in ~0.4s (was effectively O(n^2)).
conformance 206/206, features 78/78 (+7 list regressions), jank 120 (+1).
2026-06-04 19:20:27 -04:00
..
api-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
bootstrap-test.janet bootstrap: SCI core deps loading with 284/304 forms passing 2026-06-01 23:24:13 -04:00
cljs-collections-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-core-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-1.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-1a.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-1b.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-2.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-3.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-3b.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-4.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-5.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-6.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-7.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-8.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-9.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-10.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
cljs-port-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
clojure-atom-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
clojure-control-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
clojure-for-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
clojure-logic-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
clojure-macros-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
compiler-test.janet Phase 4: deftype/defrecord completion 2026-06-02 21:10:33 -04:00
conformance.janet feat: map literals evaluate their values (fixes critical latent bug); expand SCI bootstrap to 14 files (ctx_store/deftype/records/core_protocols/hierarchies + sci.impl.io stub), 390/392 forms; fix multi-arity defmethod (builds fn*) and variadic macrofy; SCI test loaders tolerant of the 2 redundant clojure.core registration maps 2026-06-04 17:28:44 -04:00
core-test.janet feat: persistent singly-linked lists with O(1) conj/cons prepend 2026-06-04 19:20:27 -04:00
eval-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
evaluator-test.janet bootstrap: SCI core deps loading with 284/304 forms passing 2026-06-01 23:24:13 -04:00
features-test.janet feat: persistent singly-linked lists with O(1) conj/cons prepend 2026-06-04 19:20:27 -04:00
hash-map-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
interop-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
jank-conformance.janet feat: persistent singly-linked lists with O(1) conj/cons prepend 2026-06-04 19:20:27 -04:00
lazy-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
logic-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
macro-test.janet Initial commit: Jolt — Clojure interpreter on Janet 2026-06-01 16:48:56 -04:00
namespace-test.janet Initial commit: Jolt — Clojure interpreter on Janet 2026-06-01 16:48:56 -04:00
phase5-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase6-final.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase6-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase7-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase8-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase10-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase12-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
phase13-test.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
reader-test.janet feat: proper char type ({:jolt/type :jolt/char :ch N}) — reader literals, char?/char/int/str, =, seq/first/rest/nth of strings yield chars, char printing; fix REPL multi-line input accumulation 2026-06-04 15:40:59 -04:00
systematic-coverage.janet feat: structural-sharing persistent vectors (immutable build) + mutable toggle 2026-06-04 18:56:55 -04:00
test-load-sci.janet feat: map literals evaluate their values (fixes critical latent bug); expand SCI bootstrap to 14 files (ctx_store/deftype/records/core_protocols/hierarchies + sci.impl.io stub), 390/392 forms; fix multi-arity defmethod (builds fn*) and variadic macrofy; SCI test loaders tolerant of the 2 redundant clojure.core registration maps 2026-06-04 17:28:44 -04:00
test-sci-runtime.janet feat: map literals evaluate their values (fixes critical latent bug); expand SCI bootstrap to 14 files (ctx_store/deftype/records/core_protocols/hierarchies + sci.impl.io stub), 390/392 forms; fix multi-arity defmethod (builds fn*) and variadic macrofy; SCI test loaders tolerant of the 2 redundant clojure.core registration maps 2026-06-04 17:28:44 -04:00
types-test.janet Initial commit: Jolt — Clojure interpreter on Janet 2026-06-01 16:48:56 -04:00