summary refs log tree commit diff stats
path: root/tests/run
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-10-04 13:00:37 +0200
committerAraq <rumpf_a@web.de>2012-10-04 13:00:37 +0200
commita6d5707faff21722f22f91c56704c44fc03d47f6 (patch)
treee643caa5cb942250431300c910cbd22c96507fe3 /tests/run
parent1dc2c780f12a5c6f7da3fe612f25f7b5f33815b1 (diff)
downloadNim-a6d5707faff21722f22f91c56704c44fc03d47f6.tar.gz
added titer7 test
Diffstat (limited to 'tests/run')
-rw-r--r--tests/run/titer7.nim57
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)