summary refs log blame commit diff stats
path: root/tests/controlflow/tcontrolflow.nim
blob: 258f3f50d2de41d594e0adea1c41cd164d1e8757 (plain) (tree)






















































































                                            
                              
           
                              
              
                                 
              
                                 
       
                                            
             
discard """
  output: '''
10
true true
true false
false true
false false
i == 2
'''
"""


block tbreak:
  var
    x = false
    run = true

  while run:
    run = false
    block myblock:
      if true:
        break
      echo "leaving myblock"
    x = true
  doAssert(x)

  # bug #1418
  iterator foo: int =
    for x in 0 .. 9:
      for y in [10,20,30,40,50,60,70,80,90]:
        yield x + y

  for p in foo():
    echo p
    break

  iterator permutations: int =
    yield 10

  for p in permutations():
    break

  # regression:
  proc main =
    for x in [true, false]:
      for y in [true, false]:
        echo x, " ", y

  main()



block tcontinue:
  var i = 0
  while i < 400:

    if i == 10: break
    elif i == 3:
      inc i
      continue
    inc i

  var f = "failure"
  var j = 0
  while j < 300:
    for x in 0..34:
      if j < 300: continue
      if x == 10:
        echo "failure: should never happen"
        break
    f = "came here"
    break

  if i == 10:
    doAssert f == "came here"
  else:
    echo "failure"



block tnestif:
  var
      x, y: int
  x = 2
  if x == 0:
      write(stdout, "i == 0")
      if y == 0:
          writeLine(stdout, x)
      else:
          writeLine(stdout, y)
  elif x == 1:
      writeLine(stdout, "i == 1")
  elif x == 2:
      writeLine(stdout, "i == 2")
  else:
      writeLine(stdout, "looks like Python")
  #OUT i == 2