def test_outside_result():
    input_statement = TestStatement(
        1,
        [[empty_statement(idx) for idx in range(2, 50)]],
    )
    assert not insert(input_statement, 0, empty_statement(0))[0]

    input_statement = TestStatement(
        1,
        [[empty_statement(idx) for idx in range(2, 50)]],
    )
    assert not insert(input_statement, 50, empty_statement(50))[0]
def test_simple_untiered_result():
    for statement in range(2, 50):
        input_statement = TestStatement(
            1,
            [[empty_statement(idx) for idx in range(2, 50)]],
        )
        output = insert(input_statement, statement, empty_statement(statement))
        assert output
        statements = [empty_statement(idx) for idx in range(2, 50)]
        statements.insert(statement - 2, empty_statement(statement))
        assert input_statement == TestStatement(1, [statements])
def test_modify():
    input_statement = TestStatement(
        1,
        [[empty_statement(2)]],
    )
    output = insert(input_statement, 1, empty_statement(1))
    assert output
    assert input_statement == TestStatement(1, [[
        empty_statement(1),
        empty_statement(2),
    ]])
def test_simple_tiered_result():
    for statement in range(2, 50):
        input_statement = TestStatement(
            1,
            [[
                empty_statement(2),
                empty_statement(3),
                TestStatement(
                    4,
                    [[empty_statement(idx) for idx in range(5, 50)]],
                ),
                empty_statement(50),
            ]],
        )
        output = insert(input_statement, statement, empty_statement(statement))
        assert output

        if statement < 4:
            statements = [
                empty_statement(2),
                empty_statement(3),
                TestStatement(
                    4,
                    [[empty_statement(idx) for idx in range(5, 50)]],
                ),
                empty_statement(50),
            ]
            statements.insert(statement - 2, empty_statement(statement))
        elif statement < 50:
            interior = [empty_statement(idx) for idx in range(5, 50)]
            statements = [
                empty_statement(2),
                empty_statement(3),
                TestStatement(
                    4,
                    [interior],
                ),
                empty_statement(50),
            ]
            interior.insert(statement - 4, empty_statement(statement))
        else:
            statements = [
                empty_statement(2),
                empty_statement(3),
                TestStatement(
                    4,
                    [[empty_statement(idx) for idx in range(5, 50)]],
                ),
                empty_statement(50),
                empty_statement(50),
            ]

        assert input_statement == TestStatement(1, [statements])
def test_simple_untiered_result_with_line_splits():
    for statement in range(2, 50, 2):
        input_statement = TestStatement(
            1,
            [[empty_statement(idx) for idx in range(2, 50, 2)]],
        )
        output = insert(input_statement, statement, empty_statement(statement))
        assert output
        statements = [empty_statement(idx) for idx in range(2, 50, 2)]
        statements.insert(statement // 2 - 1, empty_statement(statement))
        assert input_statement == TestStatement(1, [statements])

    for statement in range(2, 10, 3):
        input_statement = TestStatement(
            1,
            [[empty_statement(idx) for idx in range(2, 10, 2)]],
        )
        output = insert(input_statement, statement, empty_statement(statement))
        assert output
        statements = [empty_statement(idx) for idx in range(2, 10, 2)]
        statements.insert(statement // 2, empty_statement(statement))
        assert input_statement == TestStatement(1, [statements])