summary refs log tree commit diff stats
path: root/tests/run
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-06-21 08:46:56 +0200
committerAraq <rumpf_a@web.de>2012-06-21 08:46:56 +0200
commit7b4560337b3489ba2364fe97066c79d8a23dad87 (patch)
treef05d0a51cd2679272589cbcd529141fb68c02a2a /tests/run
parent00feaa2530b0f3623a488d77603045c327805b05 (diff)
downloadNim-7b4560337b3489ba2364fe97066c79d8a23dad87.tar.gz
bugfixes for closures
Diffstat (limited to 'tests/run')
-rw-r--r--tests/run/tfilter.nim28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/run/tfilter.nim b/tests/run/tfilter.nim
new file mode 100644
index 000000000..e82d05742
--- /dev/null
+++ b/tests/run/tfilter.nim
@@ -0,0 +1,28 @@
+discard """
+  output: "02468101214161820"
+"""
+
+proc filter[T](list: seq[T], f: proc (item: T): bool {.closure.}): seq[T] =
+  result = @[]
+  for i in items(list):
+    if f(i):
+      result.add(i)
+
+let nums = @[0, 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
+
+when true:
+  let nums2 = filter(nums,
+               (proc (item: int): bool =
+                 result = (item mod 2) == 0)
+               )
+
+proc outer =
+  # lets use a proper closure this time:
+  var modulo = 2
+  let nums2 = filter(nums,
+               (proc (item: int): bool = result = (item mod modulo) == 0)
+               )
+
+  for n in nums2: stdout.write(n)
+
+outer()