Finish ggt task

This commit is contained in:
Jan-Niclas Loosen
2025-10-18 17:13:08 +02:00
parent ee97bf1518
commit 7f3cd757ae
4 changed files with 96 additions and 211 deletions

View File

@@ -1,57 +1,67 @@
from MaMaGUI import MaMaGUI
from MaMaMa import MaMaMa
from MaMa import MaMa
if __name__ == "__main__":
# Algor
prog = [
'cequal(26)',
'cleqR(11)',
'csub(-1,0,-1)',
'ldo(-1)',
'ldo(-1)',
'equal(25)',
'ldo(0)',
'ldo(-2)',
'leq(11)',
'ldo(0)',
'ldo(-2)',
'sub',
'sto(-1)',
'ujp(15)',
'csub(0,-1,0)',
'nzero(-1,3)',
'swp',
'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'
]
# Create and execute MaMa instance
machine = MaMaMa(prog, [1, 1, 1, 4, 6])
# 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)
]
machine.add_macro('nzero', [
'ldo(n)',
'ldo(0)',
'sub',
'push(0)',
'equal(p)'
], ['n', 'p'])
# 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.")
machine.add_macro('cequal', [
'ldo(-1)',
'ldo(-1)',
'equal(p)'
], ["p"])
machine.add_macro('cleqR', [
'ldo(0)',
'ldo(-2)',
'leq(p)'
], ['p'])
machine.add_macro('csub', [
'ldo(n)',
'ldo(m-1)',
'sub',
'sto(s-1)'
], ['n', 'm', 's'])
machine.add_macro('swp', [
'ldo(-1)',
'ldo(-1)',
'sto(-2)',
'sto(-1)',
])
# Load machine
machine = MaMa(prog, [4,6])
# Visualize finished execution using journal
gui = MaMaGUI(machine)