Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)