summary refs log tree commit diff stats
path: root/tests/iter
diff options
context:
space:
mode:
authorMiran <narimiran@users.noreply.github.com>2018-10-13 14:58:31 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-10-13 14:58:31 +0200
commit3c9fcc4c30dd76becacaab67f2587d88490806b9 (patch)
tree6b79838f8699f0993ac36e89549df94c0bbf7cd6 /tests/iter
parentef820769a47722cd33935dd94642aca9ecc09a8b (diff)
downloadNim-3c9fcc4c30dd76becacaab67f2587d88490806b9.tar.gz
Merge tests into a larger file (part 2 of ∞) (#9335)
* merge controlflow tests

* merge distinct tests

* merge enum tests

* merge fields tests

* merge implicit tests

* merge iter issues tests
Diffstat (limited to 'tests/iter')
-rw-r--r--tests/iter/t2closureiters.nim14
-rw-r--r--tests/iter/t338.nim20
-rw-r--r--tests/iter/t8041.nim7
-rw-r--r--tests/iter/tchainediterators2.nim81
-rw-r--r--tests/iter/tcomplex_openarray.nim33
-rw-r--r--tests/iter/tissues.nim215
-rw-r--r--tests/iter/tkeep_state_between_yield.nim36
-rw-r--r--tests/iter/tnested_closure_iter.nim16
-rw-r--r--tests/iter/tobj_iter.nim18
9 files changed, 215 insertions, 225 deletions
diff --git a/tests/iter/t2closureiters.nim b/tests/iter/t2closureiters.nim
deleted file mode 100644
index ceb24548c..000000000
--- a/tests/iter/t2closureiters.nim
+++ /dev/null
@@ -1,14 +0,0 @@
-discard """
-  output: '''1'''
-"""
-# bug #3837
-
-iterator t1(): int {.closure.} =
-  yield 1
-
-iterator t2(): int {.closure.} =
-  for i in t1():
-    yield i
-
-for i in t2():
-  echo $i
diff --git a/tests/iter/t338.nim b/tests/iter/t338.nim
deleted file mode 100644
index dbced8b60..000000000
--- a/tests/iter/t338.nim
+++ /dev/null
@@ -1,20 +0,0 @@
-discard """
-  output: '''0
-1
-2
-3
-4
-'''
-"""
-
-proc moo(): iterator (): int =
-  iterator fooGen: int {.closure.} =
-    while true:
-      yield result
-      result.inc
-  return fooGen
-
-var foo = moo()
-
-for i in 0 .. 4:
-  echo foo()
diff --git a/tests/iter/t8041.nim b/tests/iter/t8041.nim
deleted file mode 100644
index c87134cfc..000000000
--- a/tests/iter/t8041.nim
+++ /dev/null
@@ -1,7 +0,0 @@
-iterator xy[T](a: T, b: set[T]): T =
-  if a in b:
-    yield a
-
-for a in xy(1'i8, {}):
-  for b in xy(a, {}):
-    echo a
diff --git a/tests/iter/tchainediterators2.nim b/tests/iter/tchainediterators2.nim
deleted file mode 100644
index c2e5e6170..000000000
--- a/tests/iter/tchainediterators2.nim
+++ /dev/null
@@ -1,81 +0,0 @@
-discard """
-  output: '''start
-false
-0
-1
-2
-end
-@[2, 4, 6, 8, 10]
-@[4, 8, 12, 16, 20]'''
-"""
-
-# bug #3837
-
-proc iter1(): (iterator: int) =
-  let coll = [0,1,2]
-  result = iterator: int {.closure.} =
-    for i in coll:
-      yield i
-
-proc iter2(it: (iterator: int)): (iterator: int)  =
-  result = iterator: int {.closure.} =
-    echo finished(it)
-    for i in it():
-      yield i
-
-echo "start"
-let myiter1 = iter1()
-let myiter2 = iter2(myiter1)
-for i in myiter2():
-  echo i
-echo "end"
-# start
-# false
-# end
-
-
-from sequtils import toSeq
-
-type Iterable*[T] = (iterator: T) | Slice[T]
-  ## Everything that can be iterated over, iterators and slices so far.
-
-proc toIter*[T](s: Slice[T]): iterator: T =
-  ## Iterate over a slice.
-  iterator it: T {.closure.} =
-    for x in s.a..s.b:
-      yield x
-  return it
-
-proc toIter*[T](i: iterator: T): iterator: T =
-  ## Nop
-  i
-
-iterator map*[T,S](i: Iterable[T], f: proc(x: T): S): S =
-  let i = toIter(i)
-  for x in i():
-    yield f(x)
-
-proc filter*[T](i: Iterable[T], f: proc(x: T): bool): iterator: T =
-  ## Iterates through an iterator and yields every item that fulfills the
-  ## predicate `f`.
-  ##
-  ## .. code-block:: nim
-  ##   for x in filter(1..11, proc(x): bool = x mod 2 == 0):
-  ##     echo x
-  let i = toIter(i)
-  iterator it: T {.closure.} =
-    for x in i():
-      if f(x):
-        yield x
-  result = it
-
-iterator filter*[T](i: Iterable[T], f: proc(x: T): bool): T =
-  let i = toIter(i)
-  for x in i():
-    if f(x):
-      yield x
-
-var it = toSeq(filter(2..10, proc(x: int): bool = x mod 2 == 0))
-echo it # @[2, 4, 6, 8, 10]
-it = toSeq(map(filter(2..10, proc(x: int): bool = x mod 2 == 0), proc(x: int): int = x * 2))
-echo it # Expected output: @[4, 8, 12, 16, 20], Actual output: @[]
diff --git a/tests/iter/tcomplex_openarray.nim b/tests/iter/tcomplex_openarray.nim
deleted file mode 100644
index 6fc191e90..000000000
--- a/tests/iter/tcomplex_openarray.nim
+++ /dev/null
@@ -1,33 +0,0 @@
-
-# bug #3221
-
-import algorithm, math, sequtils
-
-
-iterator permutations[T](ys: openarray[T]): seq[T] =
-  var
-    d = 1
-    c = newSeq[int](ys.len)
-    xs = newSeq[T](ys.len)
-  for i, y in ys: xs[i] = y
-  yield xs
-  block outer:
-    while true:
-      while d > 1:
-        dec d
-        c[d] = 0
-      while c[d] >= d:
-        inc d
-        if d >= ys.len: break outer
-      let i = if (d and 1) == 1: c[d] else: 0
-      swap xs[i], xs[d]
-      yield xs
-      inc c[d]
-
-proc dig_vectors(): void =
-  var v_nums: seq[int]
-  v_nums = newSeq[int](1)
-  for perm in permutations(toSeq(0 .. 1)):
-    v_nums[0] = 1
-
-dig_vectors()
diff --git a/tests/iter/tissues.nim b/tests/iter/tissues.nim
new file mode 100644
index 000000000..773e7dbff
--- /dev/null
+++ b/tests/iter/tissues.nim
@@ -0,0 +1,215 @@
+discard """
+  output: '''
+0
+1
+2
+3
+4
+1
+start
+false
+0
+1
+2
+end
+@[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42]
+1002
+0
+1
+2
+7
+'''
+"""
+
+
+import algorithm, math, sequtils, strutils
+
+
+block t338:
+  proc moo(): iterator (): int =
+    iterator fooGen: int {.closure.} =
+      while true:
+        yield result
+        result.inc
+    return fooGen
+
+  var foo = moo()
+
+  for i in 0 .. 4:
+    echo foo()
+
+
+
+block t8041:
+  iterator xy[T](a: T, b: set[T]): T =
+    if a in b:
+      yield a
+
+  for a in xy(1'i8, {}):
+    for b in xy(a, {}):
+      echo a
+
+
+
+block t3837_chained:
+  iterator t1(): int {.closure.} =
+    yield 1
+
+  iterator t2(): int {.closure.} =
+    for i in t1():
+      yield i
+
+  for i in t2():
+    echo $i
+
+
+  proc iter1(): (iterator: int) =
+    let coll = [0,1,2]
+    result = iterator: int {.closure.} =
+      for i in coll:
+        yield i
+
+  proc iter2(it: (iterator: int)): (iterator: int)  =
+    result = iterator: int {.closure.} =
+      echo finished(it)
+      for i in it():
+        yield i
+
+  echo "start"
+  let myiter1 = iter1()
+  let myiter2 = iter2(myiter1)
+  for i in myiter2():
+    echo i
+  echo "end"
+
+
+  type Iterable[T] = (iterator: T) | Slice[T]
+    ## Everything that can be iterated over, iterators and slices so far.
+
+  proc toIter[T](s: Slice[T]): iterator: T =
+    ## Iterate over a slice.
+    iterator it: T {.closure.} =
+      for x in s.a..s.b:
+        yield x
+    return it
+
+  proc toIter[T](i: iterator: T): iterator: T =
+    ## Nop
+    i
+
+  iterator map[T,S](i: Iterable[T], f: proc(x: T): S): S =
+    let i = toIter(i)
+    for x in i():
+      yield f(x)
+
+  proc filter[T](i: Iterable[T], f: proc(x: T): bool): iterator: T =
+    let i = toIter(i)
+    iterator it: T {.closure.} =
+      for x in i():
+        if f(x):
+          yield x
+    result = it
+
+  iterator filter[T](i: Iterable[T], f: proc(x: T): bool): T =
+    let i = toIter(i)
+    for x in i():
+      if f(x):
+        yield x
+
+  var it = toSeq(filter(2..10, proc(x: int): bool = x mod 2 == 0))
+  doAssert it == @[2, 4, 6, 8, 10]
+  it = toSeq(map(filter(2..10, proc(x: int): bool = x mod 2 == 0), proc(x: int): int = x * 2))
+  doAssert it == @[4, 8, 12, 16, 20]
+
+
+
+block t3221_complex:
+  iterator permutations[T](ys: openarray[T]): seq[T] =
+    var
+      d = 1
+      c = newSeq[int](ys.len)
+      xs = newSeq[T](ys.len)
+    for i, y in ys: xs[i] = y
+    yield xs
+    block outer:
+      while true:
+        while d > 1:
+          dec d
+          c[d] = 0
+        while c[d] >= d:
+          inc d
+          if d >= ys.len: break outer
+        let i = if (d and 1) == 1: c[d] else: 0
+        swap xs[i], xs[d]
+        yield xs
+        inc c[d]
+
+  proc dig_vectors(): void =
+    var v_nums: seq[int]
+    v_nums = newSeq[int](1)
+    for perm in permutations(toSeq(0 .. 1)):
+      v_nums[0] = 1
+
+  dig_vectors()
+
+
+
+block t3499_keepstate:
+  proc slice[T](iter: iterator(): T {.closure.}, sl: auto): seq[T] =
+    var res: seq[int64] = @[]
+    var i = 0
+    for n in iter():
+      if i > sl.b:
+        break
+      if i >= sl.a:
+        res.add(n)
+      inc i
+    res
+
+  iterator harshad(): int64 {.closure.} =
+    for n in 1 ..< int64.high:
+      var sum = 0
+      for ch in string($n):
+        sum += parseInt("" & ch)
+      if n mod sum == 0:
+        yield n
+
+  echo harshad.slice 0 ..< 20
+
+  for n in harshad():
+    if n > 1000:
+      echo n
+      break
+
+  # bug #3499 last snippet fixed
+  # bug 705  last snippet fixed
+
+
+
+block t1725_nested:
+  iterator factory(): int {.closure.} =
+    iterator bar(): int {.closure.} =
+      yield 0
+      yield 1
+      yield 2
+
+    for x in bar(): yield x
+
+  for x in factory():
+    echo x
+
+
+
+block t2023_objiter:
+  type
+    Obj = object
+      iter: iterator (): int8 {.closure.}
+
+  iterator test(): int8 {.closure.} =
+    yield 7
+
+  proc init():Obj=
+    result.iter = test
+
+  var o = init()
+  echo(o.iter())
diff --git a/tests/iter/tkeep_state_between_yield.nim b/tests/iter/tkeep_state_between_yield.nim
deleted file mode 100644
index f4f0ee363..000000000
--- a/tests/iter/tkeep_state_between_yield.nim
+++ /dev/null
@@ -1,36 +0,0 @@
-discard """
-  output: '''@[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42]
-1002'''
-"""
-
-import strutils
-
-proc slice[T](iter: iterator(): T {.closure.}, sl: auto): seq[T] =
-  var res: seq[int64] = @[]
-  var i = 0
-  for n in iter():
-    if i > sl.b:
-      break
-    if i >= sl.a:
-      res.add(n)
-    inc i
-  res
-
-iterator harshad(): int64 {.closure.} =
-  for n in 1 .. < int64.high:
-    var sum = 0
-    for ch in string($n):
-      sum += parseInt("" & ch)
-    if n mod sum == 0:
-      yield n
-
-echo harshad.slice 0 .. <20
-
-for n in harshad():
-  if n > 1000:
-    echo n
-    break
-
-
-# bug #3499 last snippet fixed
-# bug 705  last snippet fixed
diff --git a/tests/iter/tnested_closure_iter.nim b/tests/iter/tnested_closure_iter.nim
deleted file mode 100644
index ec2253cf1..000000000
--- a/tests/iter/tnested_closure_iter.nim
+++ /dev/null
@@ -1,16 +0,0 @@
-discard """
-  output: '''0
-1
-2'''
-"""
-# bug #1725
-iterator factory(): int {.closure.} =
-  iterator bar(): int {.closure.} =
-    yield 0
-    yield 1
-    yield 2
-
-  for x in bar(): yield x
-
-for x in factory():
-  echo x
diff --git a/tests/iter/tobj_iter.nim b/tests/iter/tobj_iter.nim
deleted file mode 100644
index a894755d7..000000000
--- a/tests/iter/tobj_iter.nim
+++ /dev/null
@@ -1,18 +0,0 @@
-discard """
-  output: "7"
-"""
-
-# bug #2023
-
-type
-    Obj = object
-        iter: iterator (): int8 {.closure.}
-
-iterator test(): int8 {.closure.} =
-    yield 7
-
-proc init():Obj=
-    result.iter = test
-
-var o = init()
-echo(o.iter())