diff options
Diffstat (limited to 'tests/iter/titer7.nim')
-rw-r--r-- | tests/iter/titer7.nim | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/iter/titer7.nim b/tests/iter/titer7.nim new file mode 100644 index 000000000..9cba3038d --- /dev/null +++ b/tests/iter/titer7.nim @@ -0,0 +1,53 @@ +discard """ + output: '''--- evens +2 +4 +6 +8 +--- squares +1 +4 +9 +16 +25 +36 +49 +64 +81 +''' +""" + +iterator `/`[T](sequence: seq[T], + filter: proc(e:T):bool {.closure.}) : T = + for element in sequence: + if (filter(element)): + yield element + +iterator `>>`[I,O](sequence: seq[I], + map: proc(e:I):O {.closure.}) : O = + for element in sequence: + yield map(element) + +iterator `/>>`[I,O](sequence: seq[I], + filtermap:tuple[ + f:proc(e:I):bool {.closure.}, + m:proc(e:I):O {.closure.}]) : O = + for element in sequence: + if (filtermap.f(element)): + yield filtermap.m(element) + +proc isEven(x:int): bool = + (x and 1) == 0 + +proc square(x:int): int = + x * x + +let list = @[1,2,3,4,5,6,7,8,9] + +echo ("--- evens") +for item in list / isEven: echo(item) +echo ("--- squares") +for item in list >> square: echo(item) +#echo ("--- squares of evens, only") +# next line doesn't compile. Generic types are not inferred +#for item in list />> (isEven, square) : echo(item) |