diff options
Diffstat (limited to 'src/test_alu.py')
| -rwxr-xr-x | src/test_alu.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/test_alu.py b/src/test_alu.py new file mode 100755 index 0000000..af30443 --- /dev/null +++ b/src/test_alu.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +from test_utils import * + +def make_alu_table() -> str: + alu = ALU() + n = 10000 + alu.generate_cases(n) + alu.process() + print(f"[test] running {n} ALU test cases") + return alu.to_table().strip() + +class ALU(TestGroup): + def __init__(self): + TestGroup.__init__(self, [ + Param("A", 0x0, 0xffff), + Param("B", 0x0, 0xffff), + Param("S", 0, 7), + ], [ + "Y", + "FLAGS", + ]) + + def process(self): + new_cases = [] + for kase in self.cases: + S = kase["S"] + A = kase["A"] + B = kase["B"] + kase["FLAGS"] = "x" + + match S: + case 0: Y = 0 + case 1: Y = (B - A) & 0xFFFF + case 2: Y = (A - B) & 0xFFFF + case 3: Y = (A + B) & 0xFFFF + case 4: Y = (A ^ B) & 0xFFFF + case 5: Y = (A | B) & 0xFFFF + case 6: Y = (A & B) & 0xFFFF + case 7: Y = 0xffff + + kase["Y"] = Y + new_cases.append(kase) + + self.cases = new_cases + +table = make_alu_table() +run_test("ALU", table) |
