diff options
| author | Jake Zerrer <him@jakezerrer.com> | 2025-11-26 15:10:20 -0500 |
|---|---|---|
| committer | Jake Zerrer <him@jakezerrer.com> | 2025-12-01 14:51:27 -0500 |
| commit | ff57f6567978a91b6aeb71347ccb6d0ba7028a38 (patch) | |
| tree | b4622323295c3e5743d5fd23306ff3daec4efdfc /test/unheard/cycles_test.clj | |
| parent | 10badcaa52d9d428dceb5a3219029d3640b35fb2 (diff) | |
Create cycles namespace
Thanks for your help on this one, Claude
Diffstat (limited to 'test/unheard/cycles_test.clj')
| -rw-r--r-- | test/unheard/cycles_test.clj | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/test/unheard/cycles_test.clj b/test/unheard/cycles_test.clj new file mode 100644 index 0000000..b912895 --- /dev/null +++ b/test/unheard/cycles_test.clj @@ -0,0 +1,65 @@ +(ns unheard.cycles-test + (:require [clojure.test :refer [deftest is testing]] + [unheard.cycles :refer [l f unfold]])) + +(deftest unfold-tests + (testing "single scalar" + (is (= [[0 1 :a]] + (unfold 1 :a)))) + + (testing "simple list - time subdivision" + (is (= [[0 1/3 :a] [1/3 2/3 :b] [2/3 1 :c]] + (unfold 1 (l :a :b :c))))) + + (testing "simple fork - cycles through children" + (is (= [[0 1 :a] + [1 2 :b] + [2 3 :c]] + (unfold 1 (f :a :b :c))))) + + (testing "list with fork - fork gets time slice" + (is (= [[0 1/2 :1] [1/2 1 :2] + [1 3/2 :1] [3/2 2 :3]] + (unfold 1 (l :1 (f :2 :3)))))) + + (testing "fork with list - each child subdivides its cycle" + (is (= [[0 1/2 :a] [1/2 1 :b] + [1 2 :c]] + (unfold 1 (f (l :a :b) :c))))) + + (testing "nested lists" + (is (= [[0 1/2 :a] [1/2 3/4 :b] [3/4 1 :c]] + (unfold 1 (l :a (l :b :c)))))) + + (testing "nested forks" + (is (= [[0 1 :a] + [1 2 :b] + [2 3 :c] + [3 4 :d] + [4 5 :a] + [5 6 :e] + [6 7 :c] + [7 8 :d]] + (unfold 1 (f :a (f :b :e) :c :d))))) + + (testing "complex nested structure from example" + (is (= [[0 1/2 :1] [1/2 3/4 :2] [3/4 1 :9] [1 3/2 :6] [3/2 2 :7] + [2 5/2 :1] [5/2 3 :3] [3 7/2 :6] [7/2 4 :8] + [4 9/2 :1] [9/2 5 :4] [5 11/2 :6] [11/2 6 :7] + [6 13/2 :1] [13/2 27/4 :2] [27/4 7 :9] [7 15/2 :6] [15/2 8 :8] + [8 17/2 :1] [17/2 9 :3] [9 19/2 :6] [19/2 10 :7] + [10 21/2 :1] [21/2 11 :5] [11 23/2 :6] [23/2 12 :8]] + (unfold 2 (l :1 (f (l :2 :9) :3 (f :4 :5)) :6 (f :7 :8)))))) + + (testing "different cycle lengths" + (is (= [[0 1/2 :a] [1/2 1 :b]] + (unfold 1 (l :a :b)))) + (is (= [[0 1 :a] [1 2 :b]] + (unfold 2 (l :a :b)))) + (is (= [[0 5/2 :a] [5/2 5 :b]] + (unfold 5 (l :a :b))))) + + (testing "fork with nested list subdivides correctly" + (is (= [[0 1/3 :a] [1/3 2/3 :b] [2/3 1 :c] + [1 2 :x]] + (unfold 1 (f (l :a :b :c) :x)))))) |
