def _test_initialize_offsets(self, array_traits, array_values, expected_bitsize, expected_aligned_bitsize): array = Array(array_traits, array_values) self.assertEqual(0 + expected_bitsize, array.initialize_offsets(0)) self.assertEqual(7 + expected_bitsize, array.initialize_offsets(7)) auto_array = Array(array_traits, array_values, is_auto=True) self.assertEqual( 0 + bitsizeof_varuint64(len(array_values)) + expected_bitsize, auto_array.initialize_offsets(0)) self.assertEqual( 7 + bitsizeof_varuint64(len(array_values)) + expected_bitsize, auto_array.initialize_offsets(7)) aligned_array = Array(array_traits, array_values, set_offset_method=ArrayTest._set_offset_method) self.assertEqual(0 + expected_aligned_bitsize, aligned_array.initialize_offsets(0)) self.assertEqual(1 + 7 + expected_aligned_bitsize, aligned_array.initialize_offsets(1)) self.assertEqual(3 + 5 + expected_aligned_bitsize, aligned_array.initialize_offsets(3)) self.assertEqual(5 + 3 + expected_aligned_bitsize, aligned_array.initialize_offsets(5)) self.assertEqual(7 + 1 + expected_aligned_bitsize, aligned_array.initialize_offsets(7))
def bitsizeof(_bitposition: int, value: int) -> int: """ Returns length of Zserio varuint64 type stored in the bit stream in bits. :param _bitposition: Not used. :param value: Zserio varuint64 type value. :returns: Length of given Zserio varuint64 type in bits. """ return bitsizeof_varuint64(value)
def write_varuint64(self, value: int) -> None: """ Writes a variable 16-bit unsigned integer value to the underlying storage. :param value: Value to write. :raises PythonRuntimeException: If the value is out of the range. """ self._write_varnum(value, 8, bitsizeof_varuint64(value) // 8, is_signed=False)
def _test_write(self, array_traits, array_values, expected_bitsize, expected_aligned_bitsize): array = Array(array_traits, array_values) writer = BitStreamWriter() array.write(writer) self.assertEqual(expected_bitsize, writer.bitposition) auto_array = Array(array_traits, array_values, is_auto=True) writer = BitStreamWriter() auto_array.write(writer) self.assertEqual( bitsizeof_varuint64(len(array_values)) + expected_bitsize, writer.bitposition) aligned_array = Array( array_traits, array_values, check_offset_method=ArrayTest._check_offset_method) writer = BitStreamWriter() writer.write_bool(False) aligned_array.write(writer) self.assertEqual(1 + 7 + expected_aligned_bitsize, writer.bitposition)
def test_bitsizeof_varuint64(self): self.assertEqual(1 * 8, bitsizeof_varuint64(0)) self.assertEqual(1 * 8, bitsizeof_varuint64(1 << (0))) self.assertEqual(1 * 8, bitsizeof_varuint64((1 << (7)) - 1)) self.assertEqual(2 * 8, bitsizeof_varuint64(1 << (7))) self.assertEqual(2 * 8, bitsizeof_varuint64((1 << (7 + 7)) - 1)) self.assertEqual(3 * 8, bitsizeof_varuint64(1 << (7 + 7))) self.assertEqual(3 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7)) - 1)) self.assertEqual(4 * 8, bitsizeof_varuint64(1 << (7 + 7 + 7))) self.assertEqual(4 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7 + 7)) - 1)) self.assertEqual(5 * 8, bitsizeof_varuint64(1 << (7 + 7 + 7 + 7))) self.assertEqual(5 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7 + 7 + 7)) - 1)) self.assertEqual(6 * 8, bitsizeof_varuint64(1 << (7 + 7 + 7 + 7 + 7))) self.assertEqual( 6 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7 + 7 + 7 + 7)) - 1)) self.assertEqual(7 * 8, bitsizeof_varuint64(1 << (7 + 7 + 7 + 7 + 7 + 7))) self.assertEqual( 7 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7 + 7 + 7 + 7 + 7)) - 1)) self.assertEqual(8 * 8, bitsizeof_varuint64(1 << (7 + 7 + 7 + 7 + 7 + 7 + 7))) self.assertEqual( 8 * 8, bitsizeof_varuint64((1 << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) - 1)) with self.assertRaises(PythonRuntimeException): bitsizeof_varuint64(-1) # below the lower bound with self.assertRaises(PythonRuntimeException): bitsizeof_varuint64( 1 << (7 + 7 + 7 + 7 + 7 + 7 + 7 + 8)) # above the upper bound