80 lines
1.6 KiB
Python
80 lines
1.6 KiB
Python
from MaMaGUI import MaMaGUI
|
|
from MaMa import MaMa
|
|
|
|
if __name__ == "__main__":
|
|
# Algor
|
|
prog = [
|
|
'ldo(-1)',
|
|
'ldo(-1)',
|
|
'equal(25)',
|
|
'ldo(0)',
|
|
'ldo(-2)',
|
|
'leq(11)',
|
|
'ldo(0)',
|
|
'ldo(-2)',
|
|
'sub',
|
|
'sto(-1)',
|
|
'ujp(15)',
|
|
'ldo(-1)',
|
|
'ldo(-1)',
|
|
'sub',
|
|
'sto(-2)',
|
|
'ldo(-1)',
|
|
'push(0)',
|
|
'equal(19)',
|
|
'ujp(3)',
|
|
'ldo(-1)',
|
|
'ldo(-1)',
|
|
'sto(-3)',
|
|
'sto(-1)',
|
|
'pop',
|
|
'stop',
|
|
'pop',
|
|
'stop'
|
|
]
|
|
|
|
# Test cases
|
|
tests = [
|
|
(4,6,2),
|
|
(10,5,5),
|
|
(9,3,3),
|
|
(21,14,7),
|
|
(7,13,1),
|
|
(12,18,6),
|
|
(25,5,5),
|
|
(42,56,14),
|
|
(100,80,20),
|
|
(81,27,27)
|
|
]
|
|
|
|
# Print restults into console
|
|
passed = 0
|
|
for a,b,expected in tests:
|
|
m = MaMa(prog, [a,b])
|
|
m.run()
|
|
result = m.stack.get(0)
|
|
if result == expected:
|
|
print(f"GGT({a},{b}) = {result} ✓")
|
|
passed += 1
|
|
else:
|
|
print(f"GGT({a},{b}) = {result} ✗ expected {expected}")
|
|
print(f"{passed}/{len(tests)} tests passed.")
|
|
|
|
# Load machine
|
|
machine = MaMa(prog, [4, 6])
|
|
journal = machine.run()
|
|
|
|
with open("run.txt", "w") as f:
|
|
i = 1
|
|
for step in journal:
|
|
s = step["p_stack"]
|
|
p = step["p_prog"]
|
|
S = tuple(step["stack"].values())
|
|
f.write(f"{i}: ({s},{p},{S})\n")
|
|
i += 1
|
|
|
|
# Visualize finished execution using journal
|
|
machine = MaMa(prog, [4, 6])
|
|
gui = MaMaGUI(machine)
|
|
gui.display()
|