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