add tests for recently closed issues (#10722)
This commit is contained in:
parent
ea409fb15a
commit
e7878c0d08
9 changed files with 177 additions and 1 deletions
82
tests/iter/titer12.nim
Normal file
82
tests/iter/titer12.nim
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
discard """
|
||||
output: '''
|
||||
Selecting 2
|
||||
1.0
|
||||
Selecting 4
|
||||
2.0
|
||||
'''
|
||||
"""
|
||||
|
||||
|
||||
# bug #5522
|
||||
import macros, sugar, sequtils
|
||||
|
||||
proc tryS(f: () -> void): void =
|
||||
(try: f() except: discard)
|
||||
|
||||
template trySTImpl(body: untyped): untyped =
|
||||
tryS do() -> auto:
|
||||
`body`
|
||||
|
||||
macro tryST*(body: untyped): untyped =
|
||||
var b = if body.kind == nnkDo: body[^1] else: body
|
||||
result = quote do:
|
||||
trySTImpl((block:
|
||||
`b`
|
||||
))
|
||||
|
||||
iterator testIt(): int {.closure.} =
|
||||
for x in 0..10:
|
||||
yield x
|
||||
|
||||
var xs = newSeq[int]()
|
||||
proc test = tryST do:
|
||||
for x in testIt():
|
||||
xs.add(x)
|
||||
|
||||
test()
|
||||
|
||||
doAssert xs == toSeq(0..10)
|
||||
|
||||
|
||||
|
||||
# bug #5690
|
||||
proc filter[T](it: (iterator : T), f: proc(x: T): bool): (iterator : T) =
|
||||
return iterator (): T {.closure.} =
|
||||
for x in it():
|
||||
if f(x):
|
||||
yield x
|
||||
|
||||
proc len[T](it : iterator : T) : Natural =
|
||||
for i in it():
|
||||
result += 1
|
||||
|
||||
proc simpleSeqIterator(s :seq[int]) : iterator : int =
|
||||
iterator it: int {.closure.} =
|
||||
for x in s:
|
||||
yield x
|
||||
result = it
|
||||
|
||||
let a = newSeq[int](99)
|
||||
|
||||
doAssert len(simpleSeqIterator(a).filter(proc(x : int) : bool = true)) == 99
|
||||
|
||||
|
||||
|
||||
# bug #5340
|
||||
proc where[A](input: seq[A], filter: (A) -> bool): iterator (): A =
|
||||
result = iterator (): A {.closure.} =
|
||||
for item in input:
|
||||
if filter(item):
|
||||
yield item
|
||||
|
||||
proc select[A,B](input: iterator(): A {.closure.}, selector: (A) -> B): iterator (): B {.closure.} =
|
||||
result = iterator (): B =
|
||||
for item in input():
|
||||
echo "Selecting " & $item
|
||||
yield selector(item)
|
||||
|
||||
let query = @[1,2,3,4].where(x=>x mod 2==0).select((x)=>x/2)
|
||||
|
||||
for i in query():
|
||||
echo $i
|
||||
Loading…
Add table
Add a link
Reference in a new issue