35 lines
1.5 KiB
Python
35 lines
1.5 KiB
Python
import unittest
|
|
from common import *
|
|
|
|
|
|
class BasicInstructionTest(unittest.TestCase):
|
|
def test_addi(self):
|
|
for val in [0, 1, 50, 256, 0x543210, 0xFFFFFFFF]:
|
|
program = instr_i(Opcode.ADDI, Register.A, val)
|
|
exit_code = exec_program(program, self.assertTrue)
|
|
self.assertIsNotNone(exit_code, "Connection timeout!")
|
|
self.assertEqual(exit_code, val & 0xFF, "Computed the wrong result!")
|
|
|
|
def test_multiple_addi(self):
|
|
for vals in [[0] * 16, [1] * 8, [0x50] * 256, [0x543210] * 7, [0x6543210] * 5,
|
|
[0x1337, 0x69, 0x42, 0x420, 0xbeef]]:
|
|
program = b''
|
|
val_sum = sum(vals)
|
|
for val in vals:
|
|
program += instr_i(Opcode.ADDI, Register.A, val)
|
|
exit_code = exec_program(program, self.assertTrue)
|
|
self.assertIsNotNone(exit_code, "Connection timeout!")
|
|
self.assertEqual(exit_code, val_sum & 0xFF, "Computed the wrong result!")
|
|
|
|
def test_add(self):
|
|
for val1, val2 in [(0, 0), (5, 8), (0xFFFFFFFF, 0xFFFFFFFF), (0xFFFFFFFF, 1)]:
|
|
program = instr_i(Opcode.ADDI, Register.A, val1) + instr_i(Opcode.ADDI, Register.B, val2) + instr_r(
|
|
Opcode.ADD, Register.A, Register.B)
|
|
exit_code = exec_program(program, self.assertTrue)
|
|
self.assertIsNotNone(exit_code, "Connection timeout!")
|
|
self.assertEqual(exit_code, (val1 + val2) & 0xFF, "Computed the wrong result!")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|