def test_op_add(self): """ Tests ADD op code [dst]:=[a]+[b] """ e = ElfCPU() # Invalid address 44 for a e.load_string('1,44,0,0') with self.assertRaises(ProtectionFaultError): e.step() # Invalid address 44 for b e.load_string('1,0,44,0') with self.assertRaises(ProtectionFaultError): e.step() # Invalid address 44 for dst e.load_string('1,0,0,44') with self.assertRaises(ProtectionFaultError): e.step() # 1 + 1 = 2 @ address 0 e.load_string('1,0,0,0,99') e.step() self.assertEqual(e.peek(0), 2) # 2**64 + 1 = 1 @ address 0 (overflow and wrap) e.load_string('1,5,6,0,99,' + str(2**64) + ',1') e.step() self.assertEqual(e.peek(0), 1)
def test_op_mul(self): """ Tests MUL op code [dst]:=[a]*[b] """ e = ElfCPU() # Invalid address 44 for a e.load_string('2,44,0,0') with self.assertRaises(ProtectionFaultError): e.step() # Invalid address 44 for b e.load_string('2,0,44,0') with self.assertRaises(ProtectionFaultError): e.step() # Invalid address 44 for dst e.load_string('2,0,0,44') with self.assertRaises(ProtectionFaultError): e.step() # 2 * 2 = 4 @ address 0 e.load_string('2,0,0,0,99') e.step() self.assertEqual(e.peek(0), 4) # 2**63 * 3 = 9223372036854775808 @ address 0 (overflow and wrap) e.load_string('2,5,6,0,99,' + str(2**63) + ',3') e.step() self.assertEqual(e.peek(0), 9223372036854775808)
def test_halt(self): """ Tests for the halt op code """ e = ElfCPU() e.load_string('1,0,0,0,99') e.step() self.assertFalse(e.is_halted) e.step() self.assertTrue(e.is_halted)