def test_alignto(self): writer = BitStreamWriter() writer.write_bits(5, 3) writer.alignto(8) self.assertEqual(8, writer.bitposition) writer.write_bits(0, 1) writer.alignto(16) self.assertEqual(16, writer.bitposition) writer.write_bits(0xaa, 9) writer.alignto(32) self.assertEqual(32, writer.bitposition) writer.write_bits(0xaca, 13) writer.alignto(64) self.assertEqual(64, writer.bitposition) writer.write_bits(0xcafe, 16) reader = BitStreamReader(buffer=writer.byte_array) self.assertEqual(5, reader.read_bits(3)) reader.alignto(8) self.assertEqual(8, reader.bitposition) self.assertEqual(0, reader.read_bits(1)) reader.alignto(16) self.assertEqual(16, reader.bitposition) self.assertEqual(0xaa, reader.read_bits(9)) reader.alignto(32) self.assertEqual(32, reader.bitposition) self.assertEqual(0xaca, reader.read_bits(13)) reader.alignto(64) self.assertEqual(64, reader.bitposition) self.assertEqual(0xcafe, reader.read_bits(16))
def write(self, writer: BitStreamWriter) -> None: """ Writes array to the bit stream. :param writer: Bit stream where to write. """ size = len(self._raw_array) if self._is_auto: writer.write_varsize(size) for index in range(size): if self._check_offset_method is not None: writer.alignto(8) self._check_offset_method(index, writer.bitposition) self._array_traits.write(writer, self._raw_array[index])
def test_alignto(self): writer = BitStreamWriter() writer.alignto(8) self.assertEqual(0, writer.bitposition) writer.alignto(2) self.assertEqual(0, writer.bitposition) writer.write_bool(True) writer.alignto(8) self.assertEqual(8, writer.bitposition) writer.write_bool(True) writer.alignto(2) self.assertEqual(10, writer.bitposition)