1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
discard """
output: '''
testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest2!test3?hi
what's
your
name
hi
what's
your
name
'''
"""
# Test the new iterators
iterator xrange(fromm, to: int, step = 1): int =
var a = fromm
while a <= to:
yield a
inc(a, step)
iterator interval[T](a, b: T): T =
var x = a
while x <= b:
yield x
inc(x)
#
#iterator lines(filename: string): (line: string) =
# var
# f: tTextfile
# shouldClose = open(f, filename)
# if shouldClose:
# setSpace(line, 256)
# while readTextLine(f, line):
# yield line
# finally:
# if shouldClose: close(f)
#
for i in xrange(0, 5):
for k in xrange(1, 7):
write(stdout, "test")
for j in interval(45, 45):
write(stdout, "test2!")
write(stdout, "test3?")
for x in items(["hi", "what's", "your", "name"]):
echo(x)
const
stringArray = ["hi", "what's", "your", "name"]
for i in 0..len(stringArray)-1:
echo(stringArray[i])
# bug #15360
type Rule[T] = (int, T)
var t: seq[Rule[int]]
for (c, t) in t:
discard
import std/sugar
# bug #14165
iterator log_nodups_hamming(): int {.inline.} =
let lb3 = 1
let lb4 = 123
proc mul3(): int = lb3 + lb4
yield mul3()
for h in log_nodups_hamming():
break
for h in log_nodups_hamming():
break
for h in log_nodups_hamming():
break
# bug #18536
iterator envPairs*(): int =
var foo: seq[int]
proc fun() =
foo = @[]
fun()
yield 3
proc main() =
for a in envPairs():
discard
for a in envPairs():
discard
static: main()
main()
# bug #6269
iterator makeFn(outer_val: int): proc(a: int): int =
for i in 0..1:
yield proc(a:int): int =
return a + i.int
let v1 = 42
let res = collect:
for fn1 in makeFn(v1):
let v2 = fn1(v1)
for fn2 in makeFn(v2):
fn2(v2)
doAssert res == @[42, 43, 43, 44]
block: # bug #21110
iterator p(): int =
when nimvm:
yield 0
else:
yield 0
template foo =
for k in p():
let m = ""
proc e() = discard m & ""
e()
static: foo()
foo()
# bug #15924
iterator walk(): (int, int) {.closure.} =
yield (10,11)
for (i,j) in walk():
doAssert i == 10
proc main123() =
let x = false
iterator it(): (bool, bool) {.closure.} = # normally {.closure.} here makes #21476 work
discard x
for (_, _) in it():
discard
main123()
|