From cb6cebf12e2124503f0551bc1bf6b44f68d86746 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 10 Aug 2024 14:52:53 -0400 Subject: Add test for iterators --- test/iterators.tm | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/iterators.tm 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 -- cgit v1.2.3