Add test for iterators
This commit is contained in:
parent
416300287f
commit
cb6cebf12e
38
test/iterators.tm
Normal file
38
test/iterators.tm
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user