diff options
author | Miran <narimiran@users.noreply.github.com> | 2018-10-13 14:58:31 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-10-13 14:58:31 +0200 |
commit | 3c9fcc4c30dd76becacaab67f2587d88490806b9 (patch) | |
tree | 6b79838f8699f0993ac36e89549df94c0bbf7cd6 /tests/iter | |
parent | ef820769a47722cd33935dd94642aca9ecc09a8b (diff) | |
download | Nim-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.nim | 14 | ||||
-rw-r--r-- | tests/iter/t338.nim | 20 | ||||
-rw-r--r-- | tests/iter/t8041.nim | 7 | ||||
-rw-r--r-- | tests/iter/tchainediterators2.nim | 81 | ||||
-rw-r--r-- | tests/iter/tcomplex_openarray.nim | 33 | ||||
-rw-r--r-- | tests/iter/tissues.nim | 215 | ||||
-rw-r--r-- | tests/iter/tkeep_state_between_yield.nim | 36 | ||||
-rw-r--r-- | tests/iter/tnested_closure_iter.nim | 16 | ||||
-rw-r--r-- | tests/iter/tobj_iter.nim | 18 |
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()) |