diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-08-10 14:52:53 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-08-10 14:52:53 -0400 |
| commit | cb6cebf12e2124503f0551bc1bf6b44f68d86746 (patch) | |
| tree | 5301e468c2e93117f441f0f5dddcdd456696cdec /test/iterators.tm | |
| parent | 416300287f8aedaddf5640361306972302ceb88f (diff) | |
Add test for iterators
Diffstat (limited to 'test/iterators.tm')
| -rw-r--r-- | test/iterators.tm | 38 |
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 |
