Skip to content

Commit 5f39d31

Browse files
leifericfclaude
andcommitted
Fix facade completeness test for new coloring and lsystem exports
Make coloring/solve private (too generic for the facade namespace — power users can require eido.gen.coloring directly). Re-export lsystem presets using import-fn for name consistency. Add eido.gen.coloring to the facade completeness test namespace list. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9a17076 commit 5f39d31

4 files changed

Lines changed: 45 additions & 65 deletions

File tree

src/eido/gen.clj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,12 @@
187187
(import-fn coloring/color-regions)
188188

189189
;; lsystem presets (constrained expansion with vector alternatives)
190-
(def lsystem-bush lsystem/bush)
191-
(def lsystem-fern lsystem/fern)
192-
(def lsystem-coral lsystem/coral)
193-
(def lsystem-lightning lsystem/lightning)
194-
(def lsystem-seaweed lsystem/seaweed)
195-
(def lsystem-tree lsystem/tree)
190+
(import-fn lsystem/bush)
191+
(import-fn lsystem/fern)
192+
(import-fn lsystem/coral)
193+
(import-fn lsystem/lightning)
194+
(import-fn lsystem/seaweed)
195+
(import-fn lsystem/tree)
196196

197197
;; convenience helpers
198198
(import-fn prob/mixture)

src/eido/gen/coloring.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575

7676
;; --- constraint solver ---
7777

78-
(defn solve
78+
(defn- solve
7979
"Solves a graph coloring problem via CLP(FD).
8080
n-regions: number of regions to color
8181
adjacency: collection of [i j] pairs

test/eido/facade_test.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
'eido.gen.lsystem 'eido.gen.noise 'eido.gen.particle
2828
'eido.gen.prob 'eido.gen.scatter 'eido.gen.series
2929
'eido.gen.stipple 'eido.gen.subdivide 'eido.gen.vary
30-
'eido.gen.voronoi])]
30+
'eido.gen.voronoi 'eido.gen.coloring])]
3131
(is (empty? missing)
3232
(str "eido.gen is missing exports: " (sort missing))))))
3333

test/eido/gen/coloring_test.clj

Lines changed: 37 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,43 +5,9 @@
55
[eido.gen.voronoi :as voronoi]
66
[eido.gen.subdivide :as subdivide]))
77

8-
(deftest solve-triangle-test
9-
(testing "triangle (K3) needs 3 colors"
10-
(let [adj #{[0 1] [1 2] [0 2]}]
11-
(is (= 3 (count (distinct (coloring/solve 3 adj 3)))))
12-
(is (nil? (coloring/solve 3 adj 2))))))
13-
14-
(deftest solve-bipartite-test
15-
(testing "cycle of 4 (bipartite) needs only 2 colors"
16-
(let [result (coloring/solve 4 #{[0 1] [1 2] [2 3] [0 3]} 2)]
17-
(is (some? result))
18-
(is (every? #{0 1} result))
19-
(doseq [[i j] #{[0 1] [1 2] [2 3] [0 3]}]
20-
(is (not= (nth result i) (nth result j)))))))
21-
22-
(deftest solve-no-adjacency-test
23-
(testing "no edges means all regions get a valid color"
24-
(is (= [0 0 0 0 0] (coloring/solve 5 #{} 3)))))
25-
26-
(deftest solve-empty-test
27-
(testing "zero regions returns nil"
28-
(is (nil? (coloring/solve 0 #{} 3)))))
29-
30-
(deftest solve-deterministic-test
31-
(testing "same input gives same output"
32-
(let [adj #{[0 1] [1 2] [2 3] [0 3] [0 2]}]
33-
(is (= (coloring/solve 4 adj 4)
34-
(coloring/solve 4 adj 4))))))
35-
36-
(deftest solve-with-pin-test
37-
(testing "pinned regions get their assigned color"
38-
(let [result (coloring/solve 4 #{[0 1] [1 2] [2 3] [0 3]} 3
39-
{:pin {0 2, 2 1}})]
40-
(is (some? result))
41-
(is (= 2 (nth result 0)))
42-
(is (= 1 (nth result 2)))
43-
(doseq [[i j] #{[0 1] [1 2] [2 3] [0 3]}]
44-
(is (not= (nth result i) (nth result j)))))))
8+
(def ^:private palette
9+
[[:color/rgb 255 0 0] [:color/rgb 0 255 0]
10+
[:color/rgb 0 0 255] [:color/rgb 255 255 0]])
4511

4612
(deftest cells-adjacency-test
4713
(testing "4-point Voronoi produces correct adjacency"
@@ -60,14 +26,12 @@
6026
(is (pos? (count adj)))
6127
(is (every? (fn [[i j]] (< i j)) adj)))))
6228

63-
(deftest color-regions-voronoi-test
29+
(deftest color-regions-basic-test
6430
(testing "colors Voronoi cells with no adjacent same-color"
65-
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
66-
cells (voronoi/voronoi-cells points [0 0 200 200])
67-
adj (coloring/cells-adjacency cells)
68-
palette [[:color/rgb 255 0 0] [:color/rgb 0 255 0]
69-
[:color/rgb 0 0 255] [:color/rgb 255 255 0]]
70-
result (coloring/color-regions cells adj palette {:seed 42})]
31+
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
32+
cells (voronoi/voronoi-cells points [0 0 200 200])
33+
adj (coloring/cells-adjacency cells)
34+
result (coloring/color-regions cells adj palette {:seed 42})]
7135
(is (some? result))
7236
(is (= (count cells) (count result)))
7337
(is (every? :style/fill result))
@@ -77,23 +41,39 @@
7741

7842
(deftest color-regions-seed-variety-test
7943
(testing "different seeds produce different colorings"
80-
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
81-
cells (voronoi/voronoi-cells points [0 0 200 200])
82-
adj (coloring/cells-adjacency cells)
83-
palette [[:color/rgb 255 0 0] [:color/rgb 0 255 0]
84-
[:color/rgb 0 0 255] [:color/rgb 255 255 0]]
44+
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
45+
cells (voronoi/voronoi-cells points [0 0 200 200])
46+
adj (coloring/cells-adjacency cells)
8547
r1 (mapv :style/fill (coloring/color-regions cells adj palette {:seed 1}))
8648
r2 (mapv :style/fill (coloring/color-regions cells adj palette {:seed 2}))]
8749
(is (not= r1 r2)))))
8850

51+
(deftest color-regions-deterministic-test
52+
(testing "same seed produces same result"
53+
(let [points [[50 50] [150 50] [100 150]]
54+
cells (voronoi/voronoi-cells points [0 0 200 200])
55+
adj (coloring/cells-adjacency cells)]
56+
(is (= (coloring/color-regions cells adj palette {:seed 42})
57+
(coloring/color-regions cells adj palette {:seed 42}))))))
58+
8959
(deftest color-regions-with-pin-test
9060
(testing "pinning specific regions to colors"
91-
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
92-
cells (voronoi/voronoi-cells points [0 0 200 200])
93-
adj (coloring/cells-adjacency cells)
94-
palette [[:color/rgb 255 0 0] [:color/rgb 0 255 0]
95-
[:color/rgb 0 0 255] [:color/rgb 255 255 0]]
96-
red [:color/rgb 255 0 0]
97-
result (coloring/color-regions cells adj palette {:seed 1 :pin {0 red}})]
61+
(let [points [[50 50] [150 50] [100 150] [50 150] [150 150]]
62+
cells (voronoi/voronoi-cells points [0 0 200 200])
63+
adj (coloring/cells-adjacency cells)
64+
red [:color/rgb 255 0 0]
65+
result (coloring/color-regions cells adj palette {:seed 1 :pin {0 red}})]
9866
(is (some? result))
99-
(is (= red (:style/fill (nth result 0)))))))
67+
(is (= red (:style/fill (nth result 0))))
68+
;; Adjacency still respected
69+
(doseq [[i j] adj]
70+
(is (not= (:style/fill (nth result i))
71+
(:style/fill (nth result j))))))))
72+
73+
(deftest color-regions-impossible-test
74+
(testing "triangle with 2 colors returns nil"
75+
(let [points [[50 50] [150 50] [100 150]]
76+
cells (voronoi/voronoi-cells points [0 0 200 200])
77+
adj (coloring/cells-adjacency cells)
78+
pal2 [[:color/rgb 255 0 0] [:color/rgb 0 255 0]]]
79+
(is (nil? (coloring/color-regions cells adj pal2 {:seed 42}))))))

0 commit comments

Comments
 (0)