summary refs log tree commit diff stats
path: root/tests/iter/titer.nim
blob: 3a2450ae3c16023f78b11ca23e78414471d82d16 (plain) (blame)
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
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]