diff options
Diffstat (limited to 'test')
| -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 |
