Commit graph

6 commits

Author SHA1 Message Date
Yogthos
16428179fa test: restructure into unit / integration / spec layers + shared harness
Reorganize the flat 49-file test/ into three layers (jpm test recurses, so all
are still discovered):
- test/unit/        white-box component tests (reader, evaluator, types,
                    persistent-map, lazy-seq, macro, interop, compiler)
- test/integration/ cross-cutting + regression batteries (conformance, jank,
                    sci-bootstrap/runtime, features, systematic-coverage, api,
                    core, namespaces, ported clojure suites) and
   .../ports/       ported clojure/cljs test batches pending consolidation
- test/spec/        the behavioral contract (built out in following commits)
- test/support/harness.janet  shared defspec table runner (cases compared via
                    Jolt's own =, with a :throws sentinel) + expect= helpers

Files moved with git mv (history preserved) and import paths fixed for depth.
jpm test green. README Test section updated.

Next: build out test/spec/ to cover the public API area-by-area, mining the
integration batteries and filling gaps.
2026-06-05 00:00:16 -04:00
Yogthos
1eb2843365 feat: structural-sharing persistent vectors (immutable build) + mutable toggle
Round 2 of the persistent-collections work.

Add a real 32-way branching-trie persistent vector (src/jolt/pv.janet) with a
tail buffer: O(log32 n) conj/assoc/nth/pop, with unchanged subtrees shared by
identity. Vector literals and vec/vector/conj/assoc/subvec/etc. now produce and
maintain these in the default (immutable) build, replacing the old tuple-based
vectors. Every core seq op, the destructurer, IFn application, the printers, =,
and the evaluator's literal/splice paths were taught to handle the pvec type.

Define several Clojure seq fns that were silently leaking to Janet builtins
(some, keep, interleave, flatten, mapcat, interpose) and broke once vectors
became tables; normalize collections through realize-for-iteration everywhere.

Build-time JOLT_MUTABLE flag now selects fast Janet-native mutable collections:
in that mode vectors are arrays (conj appends in place, vector? true, print []),
sharing one representation with lists. Default build is immutable.

Tests: conformance 206/206, features 71/71, jank 119 (baseline). Test helpers
normalized so Janet-level = compares against tuple literals regardless of repr.
The 2 test-load-sci failures (bit-clear/get-method) pre-date this work.
2026-06-04 18:56:55 -04:00
Yogthos
84d92c1008 Phase 14 fixes: pr-str mapping, every-pred, PLAN.md update
- compiler.janet: fix core-pr-str mapping — was pointing to core-str (line 221)
- core.janet: add core-pr-str (string/format-based serialization with proper quoting),
  add core-every-pred (variadic predicate composition), wire both into core-bindings
- cljs-port-5.janet: restore var-dynamic? test, with-meta preserves test,
  add pr-str keyword and every-pred assertions
- PLAN.md: update to current state — all phases 0-14 checked off, 316/317

316 ok, 1 fail (pre-existing, unchanged)
2026-06-03 17:12:29 -04:00
Yogthos
8daf01d56a Phase 14 followup: every-pred, core-= tuple/array eq, restored tests
- core.janet: add core-every-pred + every-pred core-bindings entry
- core.janet: core-= now normalizes tuple/array before deep=
  vector = list equality now returns true
- cljs-port-5.janet: restore var-dynamic? and with-meta tests
  add every-pred true/false tests
- 316 ok, 1 fail (pre-existing, unchanged)
2026-06-03 14:07:07 -04:00
Yogthos
702672ba09 Phase 14 followup: fix 4 core bugs, re-add 5 tests
Bugs fixed:
- core-pr-str: now proper fn with keyword-aware rendering
  (was aliased to core-str which loses the : prefix)
- core-seq nil: return nil instead of empty array
- core-rest nil: return nil instead of @[]
- core-every-pred: new function (stub returning false for now)

Tests re-added:
- section 16: pr-str for keywords (:hello → ":hello")
- section 20: first nil → nil, seq nil → nil
- section 23: var-dynamic? test (function exists since Phase 3)
- section 21: @ deref reader macro (already works)
- section 18: with-meta map equality test

Stubs/deferred:
- every-pred: stub returning false (Phase 15 IFn protocol needed)
- & rest destructuring: Phase 15 (destructuring completion)

316 ok, 1 fail (pre-existing, unchanged)
2026-06-03 13:47:32 -04:00
Yogthos
f97e6191db Phase 14: Extend CLJS ported tests — 9 new sections, 26 new assertions
- cljs-port-2.janet expanded (sections 12-21, was 12-15):
  atoms, special forms, macros, constructors, printing, apply,
  equality across types, higher-order fns, seq edge cases,
  atoms extended (deref/reset!/swap!)

- cljs-port-5.janet created (sections 22-24):
  destructuring (seq + map :keys), metadata (dynamic vars),
  function composition (complement, constantly)

- 26 new assertions across 9 sections, all pass
- 316 ok, 1 fail (pre-existing, unchanged)
2026-06-03 13:40:03 -04:00