-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_integration.py
72 lines (57 loc) · 2.29 KB
/
test_integration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from cubelang.compiler.code_map import CodeMap
from cubelang.compiler import Stack, parser
from cubelang.execution import ExecutionContext
from cubelang.compiler.types import Function, Integer, Void, Color
from cubelang.cube_runtime import CubeRuntime
from cubelang.stdlib import stdlib
from cubelang.cube import Cube
from cubelang import orientation
from cubelang.orientation import Orientation
from cubelang.execution.executor import ITracebackWriter
from unittest.mock import MagicMock
class MockTracebackWriter(ITracebackWriter):
def print_traceback(self, error: RuntimeError, code_map: CodeMap) -> None:
raise RuntimeError()
def test_flip_flops():
code = """
let count: int
while top[1, 1] != top[2, 2] or count == 0 do
RUR'U'
count = count + 1
end
out(count)
"""
out_fn = MagicMock()
stack = Stack()
finish_function = MagicMock()
cube_runtime = CubeRuntime(Cube((3, 3, 3)), Orientation(), lambda action: None, finish_function)
cube_runtime.functions.initialize_stack(stack)
stdlib.initialize_stack(stack)
stack.add_global("out", Function(([Integer], Void)))
globals = {"out": out_fn, **stdlib.exec_globals, **cube_runtime.functions.exec_globals}
executor = ExecutionContext(globals)
executor.compile(parser.parse(code, stack))
executor.execute(MockTracebackWriter())
cube_runtime.finished()
out_fn.assert_called_once_with(6)
finish_function.assert_called_once()
def test_orient():
code = """
orient top: {G--/---/---}, bottom: {--Y/---/---} then
out(red)
else-orient top: {-W-/---/---}, right: {---/---/-O-} then
out(top[1, 1])
end
"""
out_fn = MagicMock()
stack = Stack()
cube_runtime = CubeRuntime(Cube((3, 3, 3)), Orientation(), lambda action: None, lambda: None)
cube_runtime.functions.initialize_stack(stack)
stdlib.initialize_stack(stack)
stack.add_global("out", Function(([Color], Void)))
globals = {"out": out_fn, **stdlib.exec_globals, **cube_runtime.functions.exec_globals}
executor = ExecutionContext(globals)
executor.compile(parser.parse(code, stack))
executor.execute(MockTracebackWriter())
cube_runtime.finished()
out_fn.assert_called_once_with(orientation.Color.WHITE)