Пример #1
0
 def test_in_order_placement(self):
     pp = InOrderPlacement()
     f0 = Field("f0", 4)
     f1 = Field("f1", 5)
     f2 = Field("f2", 12)
     f3 = Field("f3", 2)
     f4 = Field("f4", 32)
     fields = [f0, f1, f2, f3, f4]
     bytes = pp.place(fields)
     self.assertEqual(len(bytes), 7)
     self.assertEqual(f0.msb_in_byte(bytes[0]), 7)
     self.assertEqual(f0.lsb_in_byte(bytes[0]), 4)
     self.assertEqual(f1.msb_in_byte(bytes[0]), 3)
     self.assertEqual(f1.lsb_in_byte(bytes[1]), 7)
     self.assertEqual(f2.msb_in_byte(bytes[1]), 6)
     self.assertEqual(f2.lsb_in_byte(bytes[2]), 3)
     self.assertEqual(f3.msb_in_byte(bytes[2]), 2)
     self.assertEqual(f3.lsb_in_byte(bytes[2]), 1)
     self.assertEqual(f4.msb_in_byte(bytes[2]), 0)
     self.assertEqual(f4.lsb_in_byte(bytes[6]), 1)
Пример #2
0
    def test_field_place_multiple_bytes(self):
        # place long field in two bytes
        bytes = [Byte(), Byte()]
        f = Field("too_long_for_one_byte", 12)
        self.assertTrue(f.place(bytes, 14))
        self.assertEqual(len(f.bytes), 2)
        self.assertEqual(f.bytes[0], bytes[0])
        self.assertEqual(f.bytes[1], bytes[1])
        # msb and lsb are always relative to the underlying byte list
        self.assertEqual(f.msb, 14)
        self.assertEqual(f.lsb, 3)
        # check that bytes know the fields
        self.assertEqual(len(bytes[0].fields), 1)
        self.assertEqual(len(bytes[1].fields), 1)
        self.assertEqual(bytes[0].fields[0], f)
        self.assertEqual(bytes[1].fields[0], f)
        # check relative positions
        # in bytes[0]: 0FFFFFFF
        self.assertEqual(f.msb_in_byte(bytes[0]), 6)
        self.assertEqual(f.lsb_in_byte(bytes[0]), 0)
        self.assertEqual(f.size_in_byte(bytes[0]), 7)
        # in bytes[1]: FFFFF000
        self.assertEqual(f.msb_in_byte(bytes[1]), 7)
        self.assertEqual(f.lsb_in_byte(bytes[1]), 3)
        self.assertEqual(f.size_in_byte(bytes[1]), 5)

        # place one field in more bytes than needed
        bytes2 = [Byte(), Byte(), Byte()]
        f2 = Field("too_long_for_one_byte", 12)
        self.assertTrue(f2.place(bytes2, 23))
        self.assertEqual(len(f2.bytes), 2)
        self.assertEqual(f2.bytes[0], bytes2[0])
        self.assertEqual(f2.bytes[1], bytes2[1])

        bytes3 = [Byte(), Byte(), Byte()]
        f3 = Field("too_long_for_one_byte", 12)
        self.assertTrue(f3.place(bytes3, 14))
        self.assertEqual(len(f3.bytes), 2)
        self.assertEqual(f3.bytes[0], bytes3[1])
        self.assertEqual(f3.bytes[1], bytes3[2])
Пример #3
0
    def test_field_defaults(self):
        f = Field("test", 4)
        self.assertEqual(f.name, "test")
        self.assertEqual(f.size, 4)  # in bits

        # position is yet undefined
        self.assertTrue(isinstance(f.bytes, list))
        self.assertEqual(len(f.bytes), 0)

        # most and least significant bit definitions
        # relative to first/last byte in list
        # if field does not have a position, these should be -1
        self.assertEqual(f.msb, -1)
        self.assertEqual(f.lsb, -1)

        # byte relative msb/lsb are only defined for bytes that the field
        # is placed in
        self.assertEqual(f.msb_in_byte(Byte()), -1)
        self.assertEqual(f.lsb_in_byte(Byte()), -1)
Пример #4
0
 def test_byte_boundary_sort_placement(self):
     pp = ByteBoundarySortPlacement()
     f0 = Field("a", 4)
     f1 = Field("c", 7)
     f2 = Field("b0", 1)
     f3 = Field("d", 5)
     f4 = Field("e", 3)
     f5 = Field("big", 32)
     f6 = Field("b3", 1)
     fields = [f0, f1, f2, f3, f4, f5, f6]
     front_field = Field("first_id", 5)
     bytes = pp.place(fields, front_field=front_field)
     self.assertEqual(len(bytes), 7)
     self.assertEqual(front_field.msb_in_byte(bytes[0]), 7)
     self.assertEqual(front_field.lsb_in_byte(bytes[0]), 3)
     self.assertEqual(f4.msb_in_byte(bytes[0]), 2)
     self.assertEqual(f4.lsb_in_byte(bytes[0]), 0)
     # 32bit data
     self.assertEqual(f5.msb_in_byte(bytes[1]), 7)
     self.assertEqual(f5.lsb_in_byte(bytes[1]), 0)
     self.assertEqual(f5.msb_in_byte(bytes[2]), 7)
     self.assertEqual(f5.lsb_in_byte(bytes[2]), 0)
     self.assertEqual(f5.msb_in_byte(bytes[3]), 7)
     self.assertEqual(f5.lsb_in_byte(bytes[3]), 0)
     self.assertEqual(f5.msb_in_byte(bytes[4]), 7)
     self.assertEqual(f5.lsb_in_byte(bytes[4]), 0)
     #
     self.assertEqual(f2.msb_in_byte(bytes[5]), 7)
     self.assertEqual(f2.lsb_in_byte(bytes[5]), 7)
     self.assertEqual(f1.msb_in_byte(bytes[5]), 6)
     self.assertEqual(f1.lsb_in_byte(bytes[5]), 0)
     self.assertEqual(f6.msb_in_byte(bytes[6]), 5)
     self.assertEqual(f6.lsb_in_byte(bytes[6]), 5)
     self.assertEqual(f3.msb_in_byte(bytes[6]), 4)
     self.assertEqual(f3.lsb_in_byte(bytes[6]), 0)
     self.assertEqual(f0.msb_in_byte(bytes[7]), 3)
     self.assertEqual(f0.lsb_in_byte(bytes[7]), 0)