jolt/test/spec
Yogthos 2ccfa675f7 fix: keyword/set/map as IFn in higher-order fns; nil-seq; take-nth/interpose/sort-by/min-key arities
Biggest fix: jolt keywords are Janet keywords and maps are Janet structs/phm, but
(:a struct) at the Janet level returns nil (not a Clojure accessor) and errors on
a phm — so core-map/filter/sort-by/group-by/etc. calling (f x) directly broke the
ubiquitous keyword/set/map-as-function idioms ((map :a coll), (sort-by :k coll),
(filter a-set coll), (group-by :type coll)). Added as-fn coercion (keyword/symbol
-> key lookup, map -> key lookup, set -> membership) applied at the entry of
map/filter/remove/keep/mapv/filterv/sort-by/group-by/partition-by/some/
not-any?/not-every?/take-while/drop-while/min-key/max-key.

Also:
- realize-for-iteration treats nil as an empty seq (Clojure semantics), fixing
  nth/nthrest/nthnext/take-last/reduce/doseq over nil.
- take-nth and interpose gained their 1-arg transducer arities.
- sort-by gained the 3-arg (keyfn comparator coll) form.
- min-key/max-key: single item returns it without calling f; ties keep the last.
- underive gained the 2-arg global-hierarchy form.

clojure-test-suite pass 3535->3649, errors 177->122, clean files 39->44.
spec: seq/IFn-values-as-functions (11). jpm test green.
2026-06-05 10:10:22 -04:00
..
control-flow-spec.janet test: fold cljs ports into spec; add exceptions spec + gap coverage 2026-06-05 01:12:39 -04:00
destructuring-spec.janet test(spec): control-flow, functions, destructuring — fix loop destructuring 2026-06-05 00:16:15 -04:00
exceptions-spec.janet test: fold ported-clojure batteries into spec 2026-06-05 07:50:16 -04:00
functions-spec.janet test(spec): control-flow, functions, destructuring — fix loop destructuring 2026-06-05 00:16:15 -04:00
host-interop-spec.janet test(spec): macros, reader, host-interop, namespaces — fix def-doc, resolve, %& 2026-06-05 00:35:48 -04:00
lazy-seqs-spec.janet test: fold phase ports into spec; promote compile-mode test 2026-06-05 01:07:09 -04:00
lists-spec.janet test(spec): collections contract (sequences, vectors, lists, maps, sets) 2026-06-05 00:08:37 -04:00
macros-spec.janet test(spec): macros, reader, host-interop, namespaces — fix def-doc, resolve, %& 2026-06-05 00:35:48 -04:00
maps-spec.janet fix: merge nil/empty + conj semantics to match Clojure 2026-06-05 09:22:27 -04:00
metadata-spec.janet test(spec): lazy sequences, transducers, metadata 2026-06-05 00:26:44 -04:00
multimethods-spec.janet test: fold phase ports into spec; promote compile-mode test 2026-06-05 01:07:09 -04:00
namespaces-spec.janet fix: catch binds unwrapped thrown value; var-set targets thread binding 2026-06-05 01:23:52 -04:00
numbers-spec.janet feat: read N/M/ratio/radix/exponent number literals; clean suite measurement 2026-06-05 09:54:14 -04:00
predicates-spec.janet test: fold cljs ports into spec; add exceptions spec + gap coverage 2026-06-05 01:12:39 -04:00
protocols-spec.janet test: fold phase ports into spec; promote compile-mode test 2026-06-05 01:07:09 -04:00
reader-syntax-spec.janet test: fold phase ports into spec; promote compile-mode test 2026-06-05 01:07:09 -04:00
sequences-spec.janet fix: keyword/set/map as IFn in higher-order fns; nil-seq; take-nth/interpose/sort-by/min-key arities 2026-06-05 10:10:22 -04:00
sets-spec.janet fix: value-semantics for collection keys/elements; set literals evaluate 2026-06-05 01:02:00 -04:00
state-spec.janet test: fold ported-clojure batteries into spec 2026-06-05 07:50:16 -04:00
strings-spec.janet test: fold cljs ports into spec; add exceptions spec + gap coverage 2026-06-05 01:12:39 -04:00
transducers-spec.janet fix: transducers/reduce short-circuit over infinite seqs via reduced 2026-06-05 09:18:35 -04:00
transients-spec.janet fix: transient invokable lookup, assoc! odd args, use-after-persistent! invalidation 2026-06-05 09:29:36 -04:00
truthiness-spec.janet test: fold ported-clojure batteries into spec 2026-06-05 07:50:16 -04:00
vectors-spec.janet test(spec): collections contract (sequences, vectors, lists, maps, sets) 2026-06-05 00:08:37 -04:00