| # Tests of Skylark control flow |
| |
| load("assert.sky", "assert") |
| |
| def controlflow(): |
| # elif |
| x = 0 |
| if True: |
| x=1 |
| elif False: |
| assert.fail("else of true") |
| else: |
| assert.fail("else of else of true") |
| assert.true(x) |
| |
| x = 0 |
| if False: |
| assert.fail("then of false") |
| elif True: |
| x = 1 |
| else: |
| assert.fail("else of true") |
| assert.true(x) |
| |
| x = 0 |
| if False: |
| assert.fail("then of false") |
| elif False: |
| assert.fail("then of false") |
| else: |
| x = 1 |
| assert.true(x) |
| controlflow() |
| |
| def loops(): |
| y = "" |
| for x in [1, 2, 3, 4, 5]: |
| if x == 2: |
| continue |
| if x == 4: |
| break |
| y = y + str(x) |
| return y |
| assert.eq(loops(), "13") |
| |
| # return |
| g = 123 |
| def f(x): |
| for g in (1, 2, 3): |
| if g == x: |
| return g |
| assert.eq(f(2), 2) |
| assert.eq(f(4), None) # falling off end => return None |
| assert.eq(g, 123) # unchanged by local use of g in function |
| |
| # infinite sequences |
| def fib(n): |
| seq = [] |
| for x in fibonacci: # fibonacci is an infinite iterable defined in eval_test.go |
| if len(seq) == n: |
| break |
| seq.append(x) |
| return seq |
| assert.eq(fib(10), [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]) |