From 6940b2c7f57980200f804bbfc039f2edcef19eb8 Mon Sep 17 00:00:00 2001 From: Yogthos Date: Sun, 28 Jun 2026 01:40:51 -0400 Subject: [PATCH] corpus: certify seq realization order, count, and memoization The corpus compares values, so eager-vs-lazy was invisible (identical values). Add rows that reduce laziness to a value via a side-effect counter: realization order (map/filter left-to-right), exact realization count under take/nth/drop (no over-realization), and lazy-seq memoization (realize-once across repeated walks). Sourced through unchunked producers (iterate, lists) so jolt's unchunked model matches the JVM. All certify against Clojure 1.12.5. --- test/chez/corpus.edn | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/chez/corpus.edn b/test/chez/corpus.edn index 2b8e062..7fe562e 100644 --- a/test/chez/corpus.edn +++ b/test/chez/corpus.edn @@ -794,6 +794,13 @@ {:suite "lazy-seq / realization is shared across walks" :label "effects run once across three walks" :expected "3" :actual "(let [a (atom 0) s (map (fn [x] (swap! a inc) x) [1 2 3])] (doall s) (dorun s) (vec s) (deref a))"} {:suite "lazy-seq / realization is shared across walks" :label "values stable across walks" :expected "true" :actual "(let [s (map inc [1 2 3])] (= (vec s) (vec s) [2 3 4]))"} {:suite "lazy-seq / realization is shared across walks" :label "filter effects once" :expected "4" :actual "(let [a (atom 0) s (filter (fn [x] (swap! a inc) (odd? x)) [1 2 3 4])] (dorun s) (count s) (deref a))"} + {:suite "lazy / realization order & count" :label "map realizes left-to-right" :expected "[1 2 3]" :actual "(let [log (atom [])] (dorun (map (fn [x] (swap! log conj x) x) (list 1 2 3))) @log)"} + {:suite "lazy / realization order & count" :label "filter realizes left-to-right" :expected "[1 2 3]" :actual "(let [log (atom [])] (dorun (filter (fn [x] (swap! log conj x) true) (list 1 2 3))) @log)"} + {:suite "lazy / realization order & count" :label "take realizes exactly n, no over-realization" :expected "3" :actual "(let [a (atom 0)] (dorun (take 3 (map (fn [x] (swap! a inc) x) (iterate inc 0)))) @a)"} + {:suite "lazy / realization order & count" :label "nth realizes exactly index+1" :expected "3" :actual "(let [a (atom 0)] (nth (map (fn [x] (swap! a inc) x) (iterate inc 0)) 2) @a)"} + {:suite "lazy / realization order & count" :label "drop+first realizes through the index" :expected "3" :actual "(let [a (atom 0)] (first (drop 2 (map (fn [x] (swap! a inc) x) (iterate inc 0)))) @a)"} + {:suite "lazy / realization is memoized" :label "first twice realizes once" :expected "1" :actual "(let [a (atom 0) s (map (fn [x] (swap! a inc) x) (iterate inc 0))] (first s) (first s) @a)"} + {:suite "lazy / realization is memoized" :label "wider take extends, does not re-realize" :expected "4" :actual "(let [a (atom 0) s (map (fn [x] (swap! a inc) x) (iterate inc 0))] (doall (take 2 s)) (doall (take 4 s)) @a)"} {:suite "list / construct & predicate" :label "list" :expected "[1 2 3]" :actual "(list 1 2 3)"} {:suite "list / construct & predicate" :label "empty list" :expected "[]" :actual "(list)"} {:suite "list / construct & predicate" :label "quoted list" :expected "[1 2 3]" :actual "(quote (1 2 3))"}