# entry point for validator @nonpure def expect_capture(return_captures: bool, extern_captures: bool, arg_captures): return False g = [0] h = '' @nonpure def make_sure_globals_arent_optd_out(): g.append(1) print(h) make_sure_globals_arent_optd_out() @test def test_1(a): global g g = a assert expect_capture(False, True, ()) # a test_1([42]) @test def test_2(a, b, c): x = c b[0] = a y = x assert expect_capture(False, False, (1,)) # a assert expect_capture(False, False, ()) # b assert expect_capture(False, False, ()) # c test_2([42], [[1]], ['x']) @test def test_3(a): global g x = [1] p = __ptr__(x) p[0] = a q = p g = p[0] assert expect_capture(False, True, ()) # a test_3([42]) @test def test_4(a): global g v = [a] g = v[0] assert expect_capture(False, True, ()) # a test_4([42]) @test def test_5(a): global g v = [a] for i in v: g = i assert expect_capture(False, True, ()) # a test_5([42]) @test def test_6(a, b, c): a[0] = b c[0] = a assert expect_capture(False, False, (2,)) # a assert expect_capture(False, False, (0, 2)) # b assert expect_capture(False, False, ()) # c test_6([[0]], [42], [[[0]]]) @test def test_7(a, b, c): assert expect_capture(True, False, ()) # a assert expect_capture(False, False, ()) # b assert expect_capture(True, False, ()) # c return a if b else c test_7([11], g, [22]) class X: v: List[List[int]] @test def test_8(a): x = X([]) x.v.append(a) assert expect_capture(True, False, ()) # a return x test_8([42]) @test def test_9(a): a = [0] assert expect_capture(False, False, ()) # a return a test_9([42]) @test def test_10(a, b): if b: a = [0] assert expect_capture(True, False, ()) # a assert expect_capture(False, False, ()) # b return a test_10([42], [99]) @test def test_11(a): global g g = a assert expect_capture(True, True, ()) # a return g test_11([42]) @test def test_12(a, b): global g b[0] = a x = {2: b} y = [x] z = {'z': y} g = z['z'][0][2][0] assert expect_capture(True, True, (1,)) # a assert expect_capture(True, True, (0,)) # b return z test_12([42], [[0]]) @test def test_13(a, n): if n > 0: test_13(a, n - 1) assert expect_capture(True, True, ()) # a assert expect_capture(False, False, ()) # b return a test_13([42], 3) @test def test_14(a): def assign_global(a): global g g = a assign_global(a) assert expect_capture(True, True, ()) # a return g test_14([42]) class A: a: Optional[A] @test def test_15(a, b): a.a = b b.a = a assert expect_capture(False, False, (1,)) # a assert expect_capture(False, False, (0,)) # b test_15(A(None), A(None)) @test def test_16(a, b): a.a = b b.a = a assert expect_capture(True, False, (1,)) # a assert expect_capture(True, False, (0,)) # b return a test_16(A(None), A(None)) @test def test_17(a): global h h = a[1:-1] assert expect_capture(True, True, ()) # a return a[2:-2] test_17('hello world') @test def test_18(a, b): if a: x = (b, b) raise ValueError(x[len(b)]) assert expect_capture(False, False, ()) # a assert expect_capture(False, True, ()) # b test_18([0 for _ in range(0)], 'b') def assign1(x, y): x[0] = y @test def test_19(a, b, cond, elem): assign1(a if cond else b, elem) assert expect_capture(False, False, ()) # a assert expect_capture(True, False, ()) # b assert expect_capture(False, False, ()) # cond assert expect_capture(True, False, (0, 1)) # elem return b test_19(['a'], ['b'], [True], 'x') @test def test_20(x): a = [''] p = a p[0] = x assert expect_capture(True, False, ()) # x return a test_20('x') @test def test_21(x): a = '' p = __ptr__(a) p[0] = x assert expect_capture(True, False, ()) # x return a test_21('x') class A: a: List[str] @test def test_22(x): a = [''] p = A([]) p.a = a p.a[0] = x assert expect_capture(True, False, ()) # x return a test_22('x') def assign(p, a): p.a = a def test_23(x): a = [''] p = A([]) assign(p, a) p.a[0] = x assert expect_capture(True, False, ()) # x return a test_23('x') class S: s: str @test def test_24(a, b, cond): q = S('') if cond: q = a q.s = b assert expect_capture(False, False, ()) # a assert expect_capture(False, False, (0,)) # b assert expect_capture(False, False, ()) # cond test_24(S('s'), 'b', True) @test def test_25(a, b, v): q = S('') for i in v: if i: q = a else: q = S('q') q.s = b assert expect_capture(False, False, ()) # a assert expect_capture(False, False, (0,)) # b assert expect_capture(False, False, ()) # v test_25(S('s'), 'b', [0,1,0,1]) @test def test_26(a, b, v): q = S('') for i in v: if i: q = a else: q.s = b return q assert expect_capture(True, False, ()) # a assert expect_capture(True, False, (0,)) # b assert expect_capture(False, False, ()) # v return q test_26(S('s'), 'b', [0,1,0,1]) @test def test_27(x): a = '' p = __ptr__(a) q = __ptr__(p) q[0][0] = x assert expect_capture(True, False, ()) # x return a test_27('x')