コード例 #1
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
    def testWriteBits(self):
        writer = BitStreamWriter()
        writer.writeBits(0, 8)
        writer.writeBits(255, 8)
        writer.writeBits(1, 1)
        writer.writeBits(0x3f, 6)
        writer.writeBits(1, 1)
        self.assertEqual(b'\x00\xff\xff', writer.getByteArray())
        self.assertEqual(3 * 8, writer.getBitPosition())
        writer.writeBits(0xff, 8)
        self.assertEqual(b'\x00\xff\xff\xff', writer.getByteArray())
        self.assertEqual(4 * 8, writer.getBitPosition())
        writer.writeBits(0, 4)
        self.assertEqual(b'\x00\xff\xff\xff\x00', writer.getByteArray())
        self.assertEqual(4 * 8 + 4, writer.getBitPosition())
        writer.writeBits(0x0f, 4)
        self.assertEqual(b'\x00\xff\xff\xff\x0f', writer.getByteArray())
        self.assertEqual(5 * 8, writer.getBitPosition())
        writer.writeBits(0x80, 8)
        self.assertEqual(b'\x00\xff\xff\xff\x0f\x80', writer.getByteArray())
        self.assertEqual(6 * 8, writer.getBitPosition())

        with self.assertRaises(PythonRuntimeException):
            writer.writeBits(1, 0) # zero bits!

        with self.assertRaises(PythonRuntimeException):
            writer.writeBits(1, -1) # negative number of bits!

        with self.assertRaises(PythonRuntimeException):
            writer.writeBits(256, 8) # above the upper bound

        with self.assertRaises(PythonRuntimeException):
            writer.writeBits(-1, 8) # below the lower bound
コード例 #2
0
    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))
コード例 #3
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testWriteVarInt(self):
     writer = BitStreamWriter()
     writer.writeVarInt(0)
     self.assertEqual(b'\x00', writer.getByteArray())
     self.assertEqual(8, writer.getBitPosition())
     writer.writeVarInt(-1 << sum(VARINT_NUM_BITS))
     self.assertEqual(16, writer.getBitPosition())
     self.assertEqual(b'\x00\x80', writer.getByteArray()) # INT64_MIN is encoded as -0
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt((-1 << sum(VARINT_NUM_BITS)) - 1)
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt(1 << sum(VARINT_NUM_BITS))
コード例 #4
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testAlignTo(self):
     writer = BitStreamWriter()
     writer.alignTo(8)
     self.assertEqual(0, writer.getBitPosition())
     writer.alignTo(2)
     self.assertEqual(0, writer.getBitPosition())
     writer.writeBool(True)
     writer.alignTo(8)
     self.assertEqual(8, writer.getBitPosition())
     writer.writeBool(True)
     writer.alignTo(2)
     self.assertEqual(10, writer.getBitPosition())
コード例 #5
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testWriteVarInt64(self):
     writer = BitStreamWriter()
     writer.writeVarInt64(0)
     self.assertEqual(8, writer.getBitPosition())
     self.assertEqual(b'\x00', writer.getByteArray())
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt64(-1 << sum(VARINT64_NUM_BITS))
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt64(1 << sum(VARINT64_NUM_BITS))
コード例 #6
0
 def testWriteVarInt32(self):
     writer = BitStreamWriter()
     writer.writeVarInt32(0)
     self.assertEqual(8, writer.getBitPosition())
     self.assertEqual(b'\x00', writer.getByteArray())
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt32(VARINT32_MIN - 1)
     with self.assertRaises(PythonRuntimeException):
         writer.writeVarInt32(VARINT32_MAX + 1)
コード例 #7
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testWriteBool(self):
     writer = BitStreamWriter()
     writer.writeBool(True)
     writer.writeBool(False)
     writer.writeBool(True)
     writer.writeBool(False)
     writer.writeBool(True)
     writer.writeBool(False)
     self.assertEqual(6, writer.getBitPosition())
     self.assertEqual(b'\xA8', writer.getByteArray())
コード例 #8
0
    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))
コード例 #9
0
    def _testWrite(self, arrayTraits, arrayValues, expectedBitSize,
                   expectedAlignedBitSize):
        def _checkOffsetMethod(_index, _bitOffset):
            pass

        array = Array(arrayTraits, arrayValues)
        writer = BitStreamWriter()
        array.write(writer)
        self.assertEqual(expectedBitSize, writer.getBitPosition())

        autoArray = Array(arrayTraits, arrayValues, isAuto=True)
        writer = BitStreamWriter()
        autoArray.write(writer)
        self.assertEqual(
            getBitSizeOfVarUInt64(len(arrayValues)) + expectedBitSize,
            writer.getBitPosition())

        alignedArray = Array(arrayTraits,
                             arrayValues,
                             checkOffsetMethod=_checkOffsetMethod)
        writer = BitStreamWriter()
        alignedArray.write(writer)
        self.assertEqual(expectedAlignedBitSize, writer.getBitPosition())
コード例 #10
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
    def testWriteSignedBits(self):
        writer = BitStreamWriter()
        writer.writeSignedBits(0, 1)
        writer.writeSignedBits(-1, 2)
        writer.writeSignedBits(-1, 5)
        self.assertEqual(b'\x7f', writer.getByteArray())
        self.assertEqual(8, writer.getBitPosition())
        writer.writeSignedBits(-1, 1)
        writer.writeSignedBits(-1, 7)
        self.assertEqual(b'\x7f\xff', writer.getByteArray())
        self.assertEqual(16, writer.getBitPosition())

        with self.assertRaises(PythonRuntimeException):
            writer.writeSignedBits(1, 0) # zero bits!

        with self.assertRaises(PythonRuntimeException):
            writer.writeSignedBits(1, 1) # above the upper bound

        with self.assertRaises(PythonRuntimeException):
            writer.writeSignedBits(128, 8) # above the upper bound

        with self.assertRaises(PythonRuntimeException):
            writer.writeSignedBits(-129, 8) # below the lower bound
コード例 #11
0
ファイル: array.py プロジェクト: Qian9/zserio
    def write(self, writer: BitStreamWriter) -> None:
        """
        Writes array to the bit stream.

        :param writer: Bit stream where to write.
        """

        size = len(self._rawArray)
        if self._isAuto:
            writer.writeVarSize(size)

        for index in range(size):
            if self._checkOffsetMethod is not None:
                writer.alignTo(8)
                self._checkOffsetMethod(index, writer.getBitPosition())
            self._arrayTraits.write(writer, self._rawArray[index])
コード例 #12
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testGetBitPosition(self):
     writer = BitStreamWriter()
     self.assertEqual(0, writer.getBitPosition())
コード例 #13
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testWriteString(self):
     writer = BitStreamWriter()
     writer.writeString("")
     self.assertEqual(8, writer.getBitPosition()) # length 0
     self.assertEqual(b'\x00', writer.getByteArray())
コード例 #14
0
ファイル: test_bitwriter.py プロジェクト: qixiaoyu718/zserio
 def testWriteFloat64(self):
     writer = BitStreamWriter()
     writer.writeFloat64(0)
     self.assertEqual(64, writer.getBitPosition())
     self.assertEqual(b'\x00\x00\x00\x00\x00\x00\x00\x00', writer.getByteArray())
コード例 #15
0
 def testWriteBitBuffer(self):
     writer = BitStreamWriter()
     writer.writeBitBuffer(BitBuffer(bytes([0xAB, 0xE0]), 11))
     writer.writeBitBuffer(BitBuffer(bytes([0x00, 0xFE]), 15))
     self.assertEqual(8 + 11 + 8 + 15, writer.getBitPosition())
     self.assertEqual(b'\x0B\xAB\xE1\xE0\x1F\xC0', writer.getByteArray())