def test_jumpa_invalid_target(self): # arrange sut = Vm() sut.rom = [sut.OPC_NOP, sut.OPC_NOP, sut.OPC_JUMPA] sut.accumulator = 5 sut.program_count = 2 # act action = sut.next_step # assert self.assertRaises(InvalidPcException, action)
def test_jumpn_invalid_target_dont_fail(self): # arrange sut = Vm() sut.accumulator = 4 sut.rom = [sut.OPC_NOP, sut.OPC_JUMPN, 4, sut.OPC_NOP] sut.program_count = 1 # act sut.next_step() # assert self.assertEqual(sut.program_count, 3)
def test_jumpa(self): # arrange sut = Vm() sut.rom = [sut.OPC_NOP, sut.OPC_NOP, sut.OPC_JUMPA] sut.accumulator = 1 sut.program_count = 2 # act sut.next_step() # assert self.assertEqual(sut.program_count, 1)
def test_jumpn_dont_jump(self): # arrange sut = Vm() sut.accumulator = 1 sut.rom = [sut.OPC_NOP, sut.OPC_JUMPN, 0, sut.OPC_NOP] sut.program_count = 1 # act sut.next_step() # assert self.assertEqual(sut.program_count, 3)
def test_jumpn_invalid_target_fail(self): # arrange sut = Vm() sut.accumulator = -4 sut.rom = [sut.OPC_NOP, sut.OPC_JUMPN, 4, sut.OPC_NOP] sut.program_count = 1 # act action = sut.next_step # assert self.assertRaises(InvalidPcException, action)
def test_sub_indirect(self): # arrange sut = Vm() sut.accumulator = 1 sut.rom = [sut.OPC_SUB_I, 0, sut.OPC_NOP] sut.ram = [1, 2, 3] # act sut.next_step() # assert self.assertEqual(sut.accumulator, -1)
def test_sub_indirect_invalid_adress(self): # arrange sut = Vm() sut.accumulator = 1 sut.rom = [sut.OPC_SUB_I, 2, sut.OPC_NOP] sut.ram = [1, 2, 3] # act action = sut.next_step # assert self.assertRaises(InvalidRamAdressException, action)
def test_add_direct(self): # arrange sut = Vm() sut.accumulator = 1 sut.rom = [sut.OPC_ADD, 0, sut.OPC_NOP] sut.ram = [1, 2, 3] # act sut.next_step() # assert self.assertEqual(sut.accumulator, 2)
def test_ldpc(self): # arrange sut = Vm() sut.rom = [sut.OPC_NOP, sut.OPC_LDPC, sut.OPC_NOP] sut.program_count = 1 sut.accumulator = -4 # act sut.next_step() # assert self.assertEqual(sut.accumulator, 1) self.assertEqual(sut.program_count, 2)
def test_copyto_direct(self): # arrange sut = Vm() sut.accumulator = 42 sut.rom = [sut.OPC_COPYTO, 2, sut.OPC_NOP] # act sut.next_step() # assert self.assertEqual(sut.program_count, 2) self.assertEqual(sut.accumulator, 42) self.assertEqual(sut.ram[2], 42)
def test_bumpdwn_indirect(self): # arrange sut = Vm() sut.accumulator = 42 sut.ram = [1, 2, 3, 4] sut.rom = [sut.OPC_BUMPDWN_I, 2, sut.OPC_NOP] # act sut.next_step() # assert self.assertEqual(sut.program_count, 2) self.assertEqual(sut.accumulator, 3) self.assertEqual(sut.ram, [1, 2, 3, 3])
def test_nop(self): # arrange sut = Vm() sut.accumulator = 42 sut.ram = [1, 2, 3, 4] sut.rom = [sut.OPC_NOP, sut.OPC_NOP] # act sut.next_step() # assert self.assertEqual(sut.program_count, 1) self.assertEqual(sut.accumulator, 42) self.assertEqual(sut.ram, [1, 2, 3, 4])
def test_push_outbox(self): # arrange mock_store = [-143] # random number def mock(x): mock_store[0] = x sut = Vm() sut.rom = [sut.OPC_OUTBOX, sut.OPC_NOP] sut.ostream_subscribers.append(mock) sut.accumulator = 42 # act sut.next_step() # assert self.assertEqual(sut.program_count, 1) self.assertEqual(sut.accumulator, 0) self.assertEqual(mock_store[0], 42) # mock called