diff options
author | Araq <rumpf_a@web.de> | 2012-10-04 13:00:37 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-10-04 13:00:37 +0200 |
commit | a6d5707faff21722f22f91c56704c44fc03d47f6 (patch) | |
tree | e643caa5cb942250431300c910cbd22c96507fe3 /tests/run | |
parent | 1dc2c780f12a5c6f7da3fe612f25f7b5f33815b1 (diff) | |
download | Nim-a6d5707faff21722f22f91c56704c44fc03d47f6.tar.gz |
added titer7 test
Diffstat (limited to 'tests/run')
-rw-r--r-- | tests/run/titer7.nim | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/run/titer7.nim b/tests/run/titer7.nim new file mode 100644 index 000000000..d0337b7bd --- /dev/null +++ b/tests/run/titer7.nim @@ -0,0 +1,57 @@ +discard """ + output: '''--- evens +2 +4 +6 +8 +--- squares +1 +4 +9 +16 +25 +36 +49 +64 +81 +--- squares of evens, only +4 +16 +36 +64''' +""" + +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 {.closure.} = result = + (x and 1) == 0 + +proc square(x:int): int {.closure.} = result = + 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) |