summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-11-26 15:10:20 -0500
committerJake Zerrer <him@jakezerrer.com>2025-12-01 14:51:27 -0500
commitff57f6567978a91b6aeb71347ccb6d0ba7028a38 (patch)
treeb4622323295c3e5743d5fd23306ff3daec4efdfc /test
parent10badcaa52d9d428dceb5a3219029d3640b35fb2 (diff)
Create cycles namespace
Thanks for your help on this one, Claude
Diffstat (limited to 'test')
-rw-r--r--test/unheard/cycles_test.clj65
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))))))