Beispiel #1
0
def _code_insert(code1, code2, ndx) -> Union[Token, Tuple[Atom]]:
    if not isinstance(code1, CodeBlock):
        code1 = CodeBlock([code1])
    if code1.size() == 0:
        return code1.append(code2),
    ndx = abs(ndx) % code1.size()
    return code1.with_code_inserted_at_point(code2, ndx),
Beispiel #2
0
    def test_with_code_inserted_at_point(self):
        code_block = CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr)
        ])
        code = Literal(value="Z", push_type=PushStr)

        assert code_block.with_code_inserted_at_point(code, 0) == CodeBlock([
            code,
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr)
        ])

        assert code_block.with_code_inserted_at_point(code, 1) == CodeBlock([
            CodeBlock([
                code,
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr)
        ])

        assert code_block.with_code_inserted_at_point(code, 2) == CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr), code,
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr)
        ])

        assert code_block.with_code_inserted_at_point(code, 3) == CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr), code
            ]),
            Literal(value="C", push_type=PushStr)
        ])

        assert code_block.with_code_inserted_at_point(code, 4) == CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]), code,
            Literal(value="C", push_type=PushStr)
        ])

        assert code_block.with_code_inserted_at_point(code, 5) == CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr), code
        ])

        assert code_block.with_code_inserted_at_point(code, 100) == CodeBlock([
            CodeBlock([
                Literal(value="A", push_type=PushStr),
                Literal(value="B", push_type=PushStr)
            ]),
            Literal(value="C", push_type=PushStr), code
        ])