1# Tests of Starlark control flow
2
3load("assert.star", "assert")
4
5def controlflow():
6  # elif
7  x = 0
8  if True:
9    x=1
10  elif False:
11    assert.fail("else of true")
12  else:
13    assert.fail("else of else of true")
14  assert.true(x)
15
16  x = 0
17  if False:
18    assert.fail("then of false")
19  elif True:
20    x = 1
21  else:
22    assert.fail("else of true")
23  assert.true(x)
24
25  x = 0
26  if False:
27    assert.fail("then of false")
28  elif False:
29    assert.fail("then of false")
30  else:
31    x = 1
32  assert.true(x)
33controlflow()
34
35def loops():
36  y = ""
37  for x in [1, 2, 3, 4, 5]:
38    if x == 2:
39      continue
40    if x == 4:
41      break
42    y = y + str(x)
43  return y
44assert.eq(loops(), "13")
45
46# return
47g = 123
48def f(x):
49  for g in (1, 2, 3):
50    if g == x:
51      return g
52assert.eq(f(2), 2)
53assert.eq(f(4), None) # falling off end => return None
54assert.eq(g, 123) # unchanged by local use of g in function
55
56# infinite sequences
57def fib(n):
58  seq = []
59  for x in fibonacci: # fibonacci is an infinite iterable defined in eval_test.go
60    if len(seq) == n:
61      break
62    seq.append(x)
63  return seq
64assert.eq(fib(10),  [0, 1, 1, 2, 3, 5, 8, 13, 21, 34])
65