Esempio n. 1
0
    def test_constaddr_constaddr_int(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_INT))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 8,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iii', 1, 13, 42))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<iii', 1, 13 + 42, 42))
        self.assertEqual(vm.offset, size)
Esempio n. 2
0
    def test_regoff_float_regoff_int(self):
        self.add_opcode()
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 8,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 42.5, 13))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<ifi', 1, 13.0, 13))
        self.assertEqual(vm.offset, size)
Esempio n. 3
0
    def test_regoff_regoff_int(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_INT))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -12,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iiii', 1, 2, 3, 4))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<iiii', 1, 2, 5, 4))
        self.assertEqual(vm.offset, size)
Esempio n. 4
0
    def test_regoff_constaddr_float(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_FLOAT))

        vm, size = self.create(stack=struct.pack('<iffi', 1, 2.5, 3.5, 4))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<iffi', 1, 2.5, 6.0, 4))
        self.assertEqual(vm.offset, size)
Esempio n. 5
0
 def test_positive_int(self):
     value, = struct.unpack(
         '>H',
         Opcodes.make_addr_regoff(Opcodes.REGINDEX_TH, 42,
                                  Opcodes.ADDR_VALTYPE_INT))
     self.assertEqual(value, (Opcodes.ADDR_TYPE_REGOFF << 14) |
                      (Opcodes.REGINDEX_TH << 12) |
                      (Opcodes.ADDR_VALTYPE_INT << 11) | 42)
Esempio n. 6
0
 def test_negative_float(self):
     value, = struct.unpack(
         '>H',
         Opcodes.make_addr_regoff(Opcodes.REGINDEX_TH, -42,
                                  Opcodes.ADDR_VALTYPE_FLOAT))
     self.assertEqual(value, (Opcodes.ADDR_TYPE_REGOFF << 14) |
                      (Opcodes.REGINDEX_TH << 12) |
                      (Opcodes.ADDR_VALTYPE_FLOAT << 11) | (1 << 10) | 42)
Esempio n. 7
0
    def test_not_constaddr_float_false(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_UNARY_NOT)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_FLOAT))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 0.0, 3))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<ifi', 1, 1.0, 3))
        self.assertEqual(vm.offset, size)
Esempio n. 8
0
    def test_push_report_constaddr_int(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_STACK_PUSH)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iii', 1, 42, 3))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<iiii', 1, 42, 3, 42))
        self.assertEqual(vm.offset, size)
Esempio n. 9
0
    def test_neg_regoff_float(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_UNARY_NEG)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_FLOAT))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 2.5, 3))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<ifi', 1, -2.5, 3))
        self.assertEqual(vm.offset, size)
Esempio n. 10
0
    def test_not_regoff_int_false(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_UNARY_NOT)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iii', 1, 0, 3))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<iii', 1, 1, 3))
        self.assertEqual(vm.offset, size)
Esempio n. 11
0
    def test_push_report_regoff_float(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_STACK_PUSH)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_FLOAT))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 42.5, 3))
        vm.step(Report())

        self.assertEqual(vm.get_stack(), struct.pack('<ifif', 1, 42.5, 3,
                                                     42.5))
        self.assertEqual(vm.offset, size)
Esempio n. 12
0
    def test_reg_regoff(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_SP))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iii', 1, 42, 3))
        vm.step(Report())

        self.assertEqual(vm.SP, 12 + 42)
        self.assertEqual(vm.offset, size)
Esempio n. 13
0
    def test_reg_int_regoff_float(self):
        self.add_opcode()
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_TH))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_FLOAT))

        vm, size = self.create(stack=struct.pack('<if', 1, 42.5))
        vm.step(Report())

        self.assertEqual(vm.TH, 42)
        self.assertEqual(vm.offset, size)
Esempio n. 14
0
    def test_regoff_report_float(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_IMUY))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 2.5, 3))
        vm.step(Report(IMUY=42.5))

        self.assertEqual(vm.get_stack(), struct.pack('<ifi', 1, 2.5 + 42.5, 3))
        self.assertEqual(vm.offset, size)
Esempio n. 15
0
    def test_report_regoff(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_L2VALUE))
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_INT))

        vm, size = self.create(stack=struct.pack('<iii', 1, 42, 3))
        report = Report(L2Value=9)
        vm.step(report)

        self.assertEqual(report.L2Value, 9 + 42)
        self.assertEqual(vm.offset, size)
Esempio n. 16
0
    def test_constaddr_report_float(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_IMUX))

        vm, size = self.create(stack=struct.pack('<if', 1, 2.0))
        report = Report(IMUX=42.5)
        vm.step(report)

        self.assertEqual(vm.get_stack(), struct.pack('<if', 1, 2.0 + 42.5))
        self.assertEqual(vm.offset, size)
Esempio n. 17
0
    def test_constaddr_report_int(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_INT))
        self.add(Opcodes.make_addr_reg(Opcodes.REGINDEX_L2VALUE))

        vm, size = self.create(stack=struct.pack('<ii', 1, 2))
        report = Report(L2Value=42)
        vm.step(report)

        self.assertEqual(vm.get_stack(), struct.pack('<ii', 1, 2 + 42))
        self.assertEqual(vm.offset, size)
Esempio n. 18
0
    def test_jz_regoff_float_false(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_FLOW_JZ,
                        variant=Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_SP, -8,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(struct.pack('<H', 42))

        vm, size = self.create(stack=struct.pack('<ifi', 1, 1.0, 1))
        ret = vm.step(Report())

        self.assertEqual(vm.offset, size)
        self.assertFalse(ret)
Esempio n. 19
0
    def test_constaddr_C_float(self):
        self.add_opcode(Opcodes.OPCODE_VARIANT_C)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 9,
                                     Opcodes.ADDR_VALTYPE_FLOAT))
        self.add(struct.pack('<f', 42.5))

        vm, size = self.create(stack=struct.pack('<iibfi', 1, 2, 3, 4.0, 5))
        vm.step(Report())

        self.assertEqual(vm.get_stack(),
                         struct.pack('<iibfi', 1, 2, 3, 4.0 + 42.5, 5))
        self.assertEqual(vm.offset, size)
Esempio n. 20
0
    def test_jz_constaddr_int_true(self):
        self.add_opcode(Opcodes.OPCODE_SUBTYPE_FLOW_JZ,
                        variant=Opcodes.OPCODE_VARIANT_A)
        self.add(
            Opcodes.make_addr_regoff(Opcodes.REGINDEX_ZR, 4,
                                     Opcodes.ADDR_VALTYPE_INT))
        self.add(struct.pack('<H', 42))

        vm, size = self.create(stack=struct.pack('<iii', 1, 0, 1))
        ret = vm.step(Report())

        self.assertEqual(vm.offset, 42)
        self.assertFalse(ret)
Esempio n. 21
0
 def test_negative_float_str(self):
     value = Opcodes.make_addr_regoff(Opcodes.REGINDEX_TH, -42,
                                      Opcodes.ADDR_VALTYPE_FLOAT)
     self.assertEqual(Opcodes.make_addr_str(value).str, '[%TH-42]f')
Esempio n. 22
0
 def test_positive_int_str(self):
     value = Opcodes.make_addr_regoff(Opcodes.REGINDEX_TH, 42,
                                      Opcodes.ADDR_VALTYPE_INT)
     self.assertEqual(Opcodes.make_addr_str(value).str, '[%TH+42]i')