summary refs log tree commit diff stats
path: root/tests/iter/titer.nim
blob: f32bec2fba6cb287d153f484a13824efbc40a6a2 (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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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()