Пример #1
0
 def test_parse_array_leave(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_ARRAY_LEAVE])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_array_leave)
     self.assertIsNone(args)
Пример #2
0
 def test_parse_record_select(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_RECORD_SELECT])+'Selection\0'.encode('ascii')
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_record_select)
     self.assertEqual(args, ['Selection'])
Пример #3
0
 def test_parse_record_enter(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_RECORD_ENTER])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_record_enter)
     self.assertIsNone(args)
Пример #4
0
   def __init__(self,node):
      if isinstance(node, apx.Node):
          self.node=node
          context=apx.Context()
          context.append(node)
          apx_text=context.dumps()
      elif isinstance(node, str):
         parser = apx.Parser()
         apx_text=node
         self.node = parser.loads(apx_text)
      else:
         raise NotImplementedError(type(node))

      compiler = apx.compiler.Compiler()
      self.name=self.node.name
      self.inPortByteMap = [] #length: length of self.inPortDataFile
      self.inPortDataMap = [] #length: number of require ports
      self.outPortDataMap = [] #length: number of provide ports
      self.inPortPrograms = [] #length: number of require ports
      self.outPortPrograms = [] #length: number of provide ports
      self.outPortValues = [] #length: number of provide ports
      self.inPortDataFile = self._createInPortDataFile(self.node, compiler) if len(self.node.requirePorts)>0 else None
      self.outPortDataFile = self._createOutPortDataFile(self.node, compiler) if len(self.node.providePorts)>0 else None
      self.definitionFile = self._createDefinitionFile(node.name,apx_text)
      self.vm = apx.VM()
      self.lock=threading.Lock() #the virtual machine is not thread-safe, use this lock to protect it in case users try to read/write ports from multiple threads
      if self.inPortDataFile is not None:
         self.inPortDataFile.nodeDataHandler=self
      self.nodeDataClient=None
Пример #5
0
 def test_parse_pack_str(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_PACK_STR, 0x34, 0x12])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_pack_str)
     self.assertEqual(args, [0x1234])
Пример #6
0
 def test_exec_unpack_s32_array(self):
     vm = apx.VM()
     data = bytearray('Hello\0'.encode('utf-8'))
     vm.init_unpack_prog(len(data), data, 0)
     vm.exec_instruction(vm.exec_unpack_str, [6])
     self.assertEqual(vm.value, 'Hello')
     self.assertEqual(vm.data_offset, 6)
Пример #7
0
 def test_parse_unpack_s32_array(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_UNPACK_S32AR, 0x34, 0x12])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_unpack_s32)
     self.assertEqual(args, [0x1234])
Пример #8
0
 def test_parse_pack_u32(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_PACK_U32])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_pack_u32)
     self.assertIsNone(args)
Пример #9
0
 def test_exec_unpack_prog_u8(self):
     prog = bytes([apx.OPCODE_UNPACK_PROG, 1,0,0,0, apx.OPCODE_UNPACK_U8])
     data = bytearray([128])
     vm = apx.VM()
     vm.exec_unpack_prog(prog, data, 0)
     self.assertEqual(vm.value, 128)
     self.assertEqual(vm.data_offset, 1)
Пример #10
0
 def test_parse_pack_prog_header(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_PACK_PROG, 0x78, 0x56, 0x34, 0x12])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_pack_prog_instruction)
     self.assertEqual(args, [0x12345678])
Пример #11
0
 def test_parse_unpack_s8(self):
     vm = apx.VM()
     prog = bytes([apx.OPCODE_UNPACK_S8])
     code_next, instruction, args = vm.parse_next_instruction(prog, 0, len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertEqual(instruction, vm.exec_unpack_s8)
     self.assertIsNone(args)
Пример #12
0
 def test_exec_pack_s8_array(self):
     vm = apx.VM()
     data = bytearray(4)
     vm.init_pack_prog(value=[1,-23,18,-94], data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_s8, [4])
     self.assertEqual(data, bytearray([1, 0xe9, 18, 0xa2]))
     with self.assertRaises(ValueError) as context:
         vm.exec_instruction(vm.exec_pack_u8, [5])
Пример #13
0
 def test_exec_pack_s16_array(self):
     vm = apx.VM()
     data = bytearray(6)
     vm.init_pack_prog(value=[-918, 600, 42], data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_s16, [3])
     self.assertEqual(data, bytearray([0x6a,0xfc, 0x58,0x02, 42,0]))
     with self.assertRaises(ValueError) as context:
         vm.exec_instruction(vm.exec_pack_u8, [4])
Пример #14
0
 def test_exec_pack_u32_array(self):
     vm = apx.VM()
     data = bytearray(16)
     vm.init_pack_prog(value=[19, 12345678, 0x12345678, 900], data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_u32, [4])
     self.assertEqual(data, bytearray([19,0,0,0, 0x4e,0x61,0xbc,0, 0x78,0x56,0x34,0x12, 0x84,0x03,0,0]))
     with self.assertRaises(ValueError) as context:
         vm.exec_instruction(vm.exec_pack_u32, [5])
Пример #15
0
 def test_exec_pack_u16_array(self):
     vm = apx.VM()
     data = bytearray(8)
     vm.init_pack_prog(value=[0x0A,0x1234,65535,22], data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_u16, [4])
     self.assertEqual(data, bytearray([0x0A,0, 0x34,0x12, 0xFF,0xFF, 22,0]))
     with self.assertRaises(ValueError) as context:
         vm.exec_instruction(vm.exec_pack_u16, [5])
Пример #16
0
 def test_exec_pack_s32_array(self):
     vm = apx.VM()
     data = bytearray(8)
     vm.init_pack_prog(value=[-100000, 100000], data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_s32, [2])
     self.assertEqual(data, bytearray([0x60,0x79,0xfe,0xff, 0xa0, 0x86,0x01,0x00]))
     with self.assertRaises(ValueError) as context:
         vm.exec_instruction(vm.exec_pack_u8, [3])
Пример #17
0
 def test_exec_unpack_prog_record(self):
     prog = bytes([apx.OPCODE_UNPACK_PROG, 3,0,0,0, apx.OPCODE_RECORD_ENTER, apx.OPCODE_RECORD_SELECT])+'SoundId\0'.encode('ascii')
     prog += bytes([apx.OPCODE_UNPACK_U16,apx.OPCODE_RECORD_SELECT])+'Volume\0'.encode('ascii')+bytes([apx.OPCODE_UNPACK_U8, apx.OPCODE_RECORD_LEAVE])
     data = bytearray([63,0,12])
     vm = apx.VM()
     vm.exec_unpack_prog(prog, data, 0)
     self.assertEqual(vm.value, {'SoundId': 63, 'Volume': 12})
     self.assertEqual(vm.data_offset, 3)    
Пример #18
0
 def test_exec_unpack_s8_array(self):
     vm = apx.VM()
     data = bytearray([1, 0xe9, 18, 0xa2])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_s8, [4])
     self.assertEqual(vm.value, [1,-23,18,-94])
     self.assertEqual(vm.data_offset, 4)
Пример #19
0
 def test_exec_unpack_u32_array(self):
     vm = apx.VM()
     data = bytearray([19,0,0,0, 0x4e,0x61,0xbc,0, 0x78,0x56,0x34,0x12, 0x84,0x03,0,0])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_u32, [4])
     self.assertEqual(vm.value, [19, 12345678, 0x12345678, 900])
     self.assertEqual(vm.data_offset, 16)            
Пример #20
0
 def test_exec_unpack_u16_array(self):
     vm = apx.VM()
     data = bytearray([0x0A,0, 0x34,0x12, 0xFF,0xFF, 22,0])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_u16, [4])
     self.assertEqual(vm.value, [0x0A,0x1234,65535,22])
     self.assertEqual(vm.data_offset, 8)
Пример #21
0
 def test_exec_unpack_s32_array(self):
     vm = apx.VM()
     data = bytearray([0x60,0x79,0xfe,0xff, 0xa0, 0x86,0x01,0x00])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_s32, [2])
     self.assertEqual(vm.value, [-100000, 100000])
     self.assertEqual(vm.data_offset, 8)
Пример #22
0
 def test_exec_unpack_s16_array(self):
     vm = apx.VM()
     data = bytearray([0x6a,0xfc, 0x58,0x02, 42,0])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_s16, [3])
     self.assertEqual(vm.value, [-918, 600, 42])
     self.assertEqual(vm.data_offset, 6)
Пример #23
0
 def test_parse_end_of_program(self):
     """
     Return None when end of program
     """
     vm = apx.VM()
     prog = bytes([0,0,0])
     code_next, instruction, args = vm.parse_next_instruction(prog, len(prog), len(prog))
     self.assertEqual(code_next, len(prog))
     self.assertIsNone(instruction)
     self.assertIsNone(args)
Пример #24
0
 def test_exec_pack_u16(self):
     vm = apx.VM()
     data = bytearray(6)
     vm.init_pack_prog(value=0, data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_u16, None)
     self.assertEqual(data, bytearray([0, 0, 0, 0, 0, 0]))
     vm.value = 0x1234
     vm.exec_instruction(vm.exec_pack_u16, None)
     self.assertEqual(data, bytearray([0, 0, 0x34, 0x12, 0, 0]))
     vm.value = 65535
     vm.exec_instruction(vm.exec_pack_u16, None)
     self.assertEqual(data, bytearray([0, 0, 0x34, 0x12, 0xFF, 0xFF]))
Пример #25
0
 def test_exec_pack_u32(self):
     vm = apx.VM()
     data = bytearray(12)
     vm.init_pack_prog(value=0, data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_u32, None)
     self.assertEqual(data, bytearray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
     vm.value = 0x12345678
     vm.exec_instruction(vm.exec_pack_u32, None)
     self.assertEqual(data, bytearray([0, 0, 0, 0, 0x78, 0x56, 0x34, 0x12, 0, 0, 0, 0]))
     vm.value = 0xFFFFFFFF
     vm.exec_instruction(vm.exec_pack_u32, None)
     self.assertEqual(data, bytearray([0, 0, 0, 0, 0x78, 0x56, 0x34, 0x12, 0xFF, 0xFF, 0xFF, 0xFF]))
Пример #26
0
 def test_exec_pack_u8(self):
     vm = apx.VM()
     data = bytearray(3)
     vm.init_pack_prog(value=0, data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_u8, None)
     self.assertEqual(data, bytearray([0,0,0]))
     vm.value = 128
     vm.exec_instruction(vm.exec_pack_u8, None)
     self.assertEqual(data, bytearray([0,128,0]))
     vm.value = 255
     vm.exec_instruction(vm.exec_pack_u8, None)
     self.assertEqual(data, bytearray([0,128,255]))
Пример #27
0
 def test_exec_unpack_u32(self):
     vm = apx.VM()
     data = bytearray([0, 0, 0, 0, 0x78, 0x56, 0x34, 0x12, 0xFF, 0xFF, 0xFF, 0xFF])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_u32, None)
     self.assertEqual(vm.value, 0)
     vm.exec_instruction(vm.exec_unpack_u32, None)
     self.assertEqual(vm.value, 0x12345678)
     vm.exec_instruction(vm.exec_unpack_u32, None)
     self.assertEqual(vm.value, 0xFFFFFFFF)
     self.assertEqual(vm.data_offset, 12)
Пример #28
0
 def test_exec_unpack_s16(self):
     vm = apx.VM()
     data = bytearray([0,0x80,0xFF,0xFF,0,0,0xFF,0x7F])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_s16, None)
     self.assertEqual(vm.value, -32768)
     vm.exec_instruction(vm.exec_unpack_s16, None)
     self.assertEqual(vm.value, -1)
     vm.exec_instruction(vm.exec_unpack_s16, None)
     self.assertEqual(vm.value, 0)
     vm.exec_instruction(vm.exec_unpack_s16, None)
     self.assertEqual(vm.value, 32767)
     self.assertEqual(vm.data_offset, 8)
Пример #29
0
 def test_exec_pack_s32(self):
     vm = apx.VM()
     data = bytearray(16)
     vm.init_pack_prog(value=-2147483648, data_len=len(data), data=data, data_offset=0)
     vm.exec_instruction(vm.exec_pack_s32, None)
     self.assertEqual(data, bytearray([0,0,0,0x80, 0,0,0,0, 0,0,0,0, 0,0,0,0]))
     vm.value = -1
     vm.exec_instruction(vm.exec_pack_s32, None)
     self.assertEqual(data, bytearray([0,0,0,0x80, 0xFF,0xFF,0xFF,0xFF, 0,0,0,0, 0,0,0,0]))
     vm.value = 0
     vm.exec_instruction(vm.exec_pack_s32, None)
     self.assertEqual(data, bytearray([0,0,0,0x80, 0xFF,0xFF,0xFF,0xFF, 0,0,0,0, 0,0,0,0]))
     vm.value = 2147483647
     vm.exec_instruction(vm.exec_pack_s32, None)
     self.assertEqual(data, bytearray([0,0,0,0x80, 0xFF,0xFF,0xFF,0xFF, 0,0,0,0, 0xFF,0xFF,0xFF,0x7F]))
Пример #30
0
 def test_exec_unpack_s32(self):
     vm = apx.VM()
     data = bytearray([0,0,0,0x80, 0xFF,0xFF,0xFF,0xFF, 0,0,0,0, 0xFF,0xFF,0xFF,0x7F])
     vm.init_unpack_prog(len(data), data, 0)
     self.assertEqual(vm.value, None)
     self.assertEqual(vm.data_offset, 0)
     vm.exec_instruction(vm.exec_unpack_s32, None)
     self.assertEqual(vm.value, -2147483648)
     vm.exec_instruction(vm.exec_unpack_s32, None)
     self.assertEqual(vm.value, -1)
     vm.exec_instruction(vm.exec_unpack_s32, None)
     self.assertEqual(vm.value, 0)
     vm.exec_instruction(vm.exec_unpack_s32, None)
     self.assertEqual(vm.value, 2147483647)
     self.assertEqual(vm.data_offset, 16)