def testAlignTo(self): writer = BitStreamWriter() writer.writeBits(5, 3) writer.alignTo(8) self.assertEqual(8, writer.getBitPosition()) writer.writeBits(0, 1) writer.alignTo(16) self.assertEqual(16, writer.getBitPosition()) writer.writeBits(0xaa, 9) writer.alignTo(32) self.assertEqual(32, writer.getBitPosition()) writer.writeBits(0xaca, 13) writer.alignTo(64) self.assertEqual(64, writer.getBitPosition()) writer.writeBits(0xcafe, 16) reader = BitStreamReader(buffer=writer.getByteArray()) self.assertEqual(5, reader.readBits(3)) reader.alignTo(8) self.assertEqual(8, reader.getBitPosition()) self.assertEqual(0, reader.readBits(1)) reader.alignTo(16) self.assertEqual(16, reader.getBitPosition()) self.assertEqual(0xaa, reader.readBits(9)) reader.alignTo(32) self.assertEqual(32, reader.getBitPosition()) self.assertEqual(0xaca, reader.readBits(13)) reader.alignTo(64) self.assertEqual(64, reader.getBitPosition()) self.assertEqual(0xcafe, reader.readBits(16))
def testAlignTo(self): reader = BitStreamReader(bytes(1)) reader.alignTo(1) self.assertEqual(0, reader.getBitPosition()) reader.readBits(1) self.assertEqual(1, reader.getBitPosition()) reader.alignTo(1) self.assertEqual(1, reader.getBitPosition()) reader.alignTo(4) self.assertEqual(4, reader.getBitPosition())
def _testImpl(self, writeMethod, readMethod, values, maxStartBitPos): for bitPos in range(maxStartBitPos): writer = BitStreamWriter() if bitPos > 0: writer.writeBits(0, bitPos) for value in values: writeMethod(writer, value) reader = BitStreamReader(buffer=writer.getByteArray()) if bitPos > 0: reader.readBits(bitPos) for value in values: self.assertEqual(value, readMethod(reader), "[bitPos=%d]" % bitPos)
def _testBitsImpl(self, writeMethod, readMethod, values, numBits): for bitPos in range(numBits): writer = BitStreamWriter() if bitPos > 0: writer.writeBits(0, bitPos) for value in values: writeMethod(writer, value, numBits) reader = BitStreamReader(buffer=writer.getByteArray()) if bitPos > 0: reader.readBits(bitPos) for value in values: self.assertEqual(value, readMethod(reader, numBits), "[numBits=%d, bitPos=%d]" % (numBits, bitPos))
def read(self, reader: BitStreamReader, _index: int) -> int: """ Reads unsigned fixed integer Zserio type from the bit stream. :param reader: Bit stream from which to read. :param _index: Not used. """ return reader.readBits(self._numBits)
def testBitPosition(self): writer = BitStreamWriter() writer.writeBits(0xaaaa, 16) self.assertEqual(16, writer.getBitPosition()) writer.writeBits(0xff, 8) self.assertEqual(24, writer.getBitPosition()) reader = BitStreamReader(buffer=writer.getByteArray()) self.assertEqual(0xaaaa, reader.readBits(16)) self.assertEqual(16, reader.getBitPosition()) reader.setBitPosition(8) self.assertEqual(8, reader.getBitPosition()) self.assertEqual(0xaaff, reader.readBits(16)) reader.setBitPosition(13) self.assertEqual(13, reader.getBitPosition()) self.assertEqual(0x02, reader.readBits(3)) self.assertEqual(16, reader.getBitPosition()) self.assertEqual(0xff, reader.readBits(8)) self.assertEqual(24, reader.getBitPosition()) reader.setBitPosition(0) self.assertEqual(0, reader.getBitPosition()) self.assertEqual(0xaaaaff, reader.readBits(24))
def testReadBits(self): data = [0, 1, 255, 128, 127] reader = BitStreamReader(bytes(data)) for byte in data: self.assertEqual(byte, reader.readBits(8)) with self.assertRaises(PythonRuntimeException): reader.readBits(-1) self.assertEqual(0, reader.readBits(0)) # read 0 bits with self.assertRaises(PythonRuntimeException): reader.readBits(1) # no more bits available
def testGetBitPosition(self): reader = BitStreamReader(bytes(1)) self.assertEqual(0, reader.getBitPosition()) reader.readBits(4) self.assertEqual(4, reader.getBitPosition())