예제 #1
0
 def test_case_one(self):
     x = 0b111000111
     bitfield_low = BitField(0, 3)
     bitfield_mid = BitField(4, 5)
     bitfield_low.insert(x, 1)
     self.assertEqual(bitfield_low.extract(x), 0b111)  # 7
     self.assertEqual(bitfield_mid.extract(x),
                      0)  # middle should still == 0 after insertion
예제 #2
0
 def test_middle_bits(self):
     mid_4 = BitField(4, 7)
     # A value that fits snugly in4 bits
     self.assertEqual(mid_4.insert(13, 0), 13 << 4)
     # A value that doesn't fit; some high bits lost
     self.assertEqual(mid_4.insert(21, 0), 5 << 4)
     # Extract unsigned
     self.assertEqual(mid_4.extract(15 << 4), 15)
     # Or convert negative numbers
     self.assertEqual(mid_4.extract_signed(15 << 4), -1)
예제 #3
0
 def test_invert(self):
     lowpart = BitField(0, 3)
     midpart = BitField(4, 6)
     highpart = BitField(7, 9)
     for v in range(8):
         packed = 0
         packed = lowpart.insert(v, packed)
         packed = midpart.insert(v, packed)
         packed = highpart.insert(v, packed)
         self.assertEqual(lowpart.extract(packed), v)
         self.assertEqual(midpart.extract(packed), v)
         self.assertEqual(highpart.extract(packed), v)
예제 #4
0
 def test_replace(self):
     """Test replacing an existing field of bits."""
     packed = 0x0f0  # 11110000  --- we want to clobber those ones
     newval = 0x005  # 00000101  --- and replaced them with 0101
     field = BitField(4, 7)  # ____xxxx  --- in positions 4..7
     packed = field.insert(newval, packed)
     self.assertEqual(packed, 0x50)  # 01010000 --- some zeros replaced 1s
예제 #5
0
 def test_low_order(self):
     low_4 = BitField(0, 3)
     # A value that fits snugly in the first 4 bits
     self.assertEqual(low_4.insert(13, 0), 13)
     # A value that doesn't fit; some high bits lost
     self.assertEqual(low_4.insert(21, 0), 5)
     # Extract unsigned
     self.assertEqual(low_4.extract(15), 15)
     # Or convert negative numbers
     self.assertEqual(low_4.extract_signed(15), -1)
     # Doesn't clobber other bits
     higher = 15 << 4
     self.assertEqual(low_4.insert(13, higher), 13 + higher)
     # Extraction is masked
     packed = low_4.insert(13, higher)
     self.assertEqual(low_4.extract(packed), 13)
예제 #6
0
 def test_width(self):
     """Make sure we are masking out any bits that don't fit in 
     the field. 
     """
     second_nibble = BitField(4, 7)
     value = 0xff  # A full byte; two nibbles
     packed = second_nibble.insert(value, 0)
     self.assertEqual(packed, 0xf0)
예제 #7
0
 def test_insert_neg(self):
     bitfield = BitField(3, 5)
     packed = bitfield.insert(-1, 0)
     self.assertEqual(packed, 0b000_111_000)
     unpacked = bitfield.extract_signed(packed)
     self.assertEqual(unpacked, -1)
예제 #8
0
 def test_insert_low(self):
     """Inserting a few bits in the lowest part of the word. """
     low_bits = BitField(0, 4)
     self.assertEqual(low_bits.insert(15, 0), 15)  # All the bits to 1
     # Slip it in without disturbing higher bits
     self.assertEqual(low_bits.insert(0b1010, 0b1111_0000), 0b1111_1010)
예제 #9
0
 def test_insert_case(self):
     insert_bits = BitField(0,5)
     self.assertEqual(insert_bits.insert(0b00000, 31), 0b11111)