aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-10 14:52:53 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-10 14:52:53 -0400
commitcb6cebf12e2124503f0551bc1bf6b44f68d86746 (patch)
tree5301e468c2e93117f441f0f5dddcdd456696cdec
parent416300287f8aedaddf5640361306972302ceb88f (diff)
Add test for iterators
-rw-r--r--test/iterators.tm38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/iterators.tm b/test/iterators.tm
new file mode 100644
index 00000000..999194d9
--- /dev/null
+++ b/test/iterators.tm
@@ -0,0 +1,38 @@
+
+enum PairIteration(Done, Next(x:Text, y:Text))
+func pairwise(strs:[Text])->func()->PairIteration:
+ i := 1
+ return func():
+ if i + 1 > #strs: return PairIteration.Done
+ i += 1
+ return PairIteration.Next(strs[i-1], strs[i])
+
+enum RangeIteration(Done, Next(i:Int))
+func range(first:Int, last:Int)->func()->RangeIteration:
+ i := first
+ return func():
+ if i > last:
+ return RangeIteration.Done
+ i += 1
+ return RangeIteration.Next(i-1)
+
+func main():
+ values := ["A", "B", "C", "D"]
+
+ >> ((++) "({foo}{baz})" for foo, baz in pairwise(values))
+ = "(AB)(BC)(CD)"
+ >> ["{foo}{baz}" for foo, baz in pairwise(values)]
+ = ["AB", "BC", "CD"]
+
+ do:
+ result := [:Text]
+ for foo, baz in pairwise(values):
+ result:insert("{foo}{baz}")
+ >> result
+ = ["AB", "BC", "CD"]
+
+ >> [i for i in range(5, 10)]
+ = [5, 6, 7, 8, 9, 10]
+
+ >> (+) range(5, 10)
+ = 45