def test_it_does_an_unconditional_jump(self): vm = VM() vm.instructions = [Label('loop'), noop, noop] vm.pc = 2 Ujmp('loop').execute(vm) self.assertEqual(vm.pc, 1)
def test_it_does_not_jump_if_non_negative(self): vm = VM() vm.instructions = [Label('loop'), noop, noop] vm.vstack.push(0) vm.pc = 2 Njmp('loop').execute(vm) self.assertEqual(len(vm.vstack), 0) self.assertEqual(vm.pc, 2)
def test_it_jumps_if_zero(self): vm = VM() vm.instructions = [Label('loop'), noop, noop] vm.vstack.push(0) vm.pc = 2 Zjmp('loop').execute(vm) self.assertEqual(len(vm.vstack), 0) self.assertEqual(vm.pc, 1)
def test_it_calls_a_subroutine(self): vm = VM() vm.instructions = [noop, Label('f'), noop, noop, noop] vm.pc = 4 Call('f').execute(vm) self.assertEqual(len(vm.cstack), 1) self.assertEqual(vm.cstack.top(), 4) self.assertEqual(vm.pc, 2)