コード例 #1
0
def test_interpret_number():
    term = SyntaxNumber(int32(100))
    frame_stack = init_test_frame_stack(init_term_block(term),
                                        MachineExpressionStack([]))
    interpret_term(frame_stack)
    assert frame_stack == init_test_frame_stack(
        init_term_block(term),
        MachineExpressionStack([MachineNumber(int32(100))]),
        term_index=1,
    )
コード例 #2
0
def interpret_statement(frame_stack: MachineFrameStack) -> None:
    statement = frame_stack.current.statement
    term_index = frame_stack.current.term_index
    if term_index == 0:
        interpret_statement_enter(frame_stack)
    if term_index < len(statement.terms):
        interpret_term(frame_stack)
    else:
        interpret_statement_exit(frame_stack)
        next_statement(frame_stack)
コード例 #3
0
def test_interpret_comment():
    term = SyntaxComment("something")
    expression_stack = MachineExpressionStack([MachineNumber(int32(10))])
    frame_stack = init_test_frame_stack(init_term_block(term),
                                        expression_stack)
    interpret_term(frame_stack)
    assert frame_stack == init_test_frame_stack(
        init_term_block(term),
        MachineExpressionStack([MachineNumber(int32(10))]),
        term_index=1,
    )
コード例 #4
0
def test_interpret_identifier_call():
    term = SyntaxIdentifier(sqrt.name)
    expression_stack = MachineExpressionStack([MachineNumber(int32(16))])
    frame_stack = init_test_frame_stack(init_term_block(term),
                                        expression_stack)
    interpret_term(frame_stack)
    assert frame_stack == init_test_frame_stack(
        init_term_block(term),
        MachineExpressionStack([MachineNumber(int32(4))]),
        term_index=1,
    )
コード例 #5
0
def test_interpret_identifier_value():
    term = SyntaxIdentifier(PI.name)
    expression_stack = MachineExpressionStack([])
    frame_stack = init_test_frame_stack(init_term_block(term),
                                        expression_stack)
    interpret_term(frame_stack)
    assert frame_stack == init_test_frame_stack(
        init_term_block(term),
        MachineExpressionStack([PI.value]),
        term_index=1,
    )
コード例 #6
0
def test_interpret_block():
    term = init_term_block(SyntaxNumber(int32(2)))
    expression_stack = MachineExpressionStack([MachineNumber(int32(10))])
    frame_stack = init_test_frame_stack(init_term_block(term),
                                        expression_stack)
    interpret_term(frame_stack)
    assert len(frame_stack) == 2
    assert (frame_stack.frames[0] == init_test_frame_stack(
        init_term_block(term),
        MachineExpressionStack([MachineNumber(int32(10))]),
        term_index=1,
    ).frames[0])
    assert frame_stack.frames[1] == MachineFrame(
        instruction_pointer=MachineInstructionPointer(block=term,
                                                      statement_index=0,
                                                      term_index=0),
        environment=test_environment().extend(),
        expression_stack=MachineExpressionStack([MachineNumber(int32(10))]),
    )