MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / testTranscoding

Function testTranscoding

src/Compression/tests/gtest_compressionCodec.cpp:459–498  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

457
458template <typename Timer>
459void testTranscoding(Timer & timer, ICompressionCodec & codec, const CodecTestSequence & test_sequence,
460 std::optional<double> expected_compression_ratio = {})
461{
462 const auto & source_data = test_sequence.serialized_data;
463
464 const UInt32 encoded_max_size = codec.getCompressedReserveSize(
465 static_cast<UInt32>(source_data.size()));
466 PODArray<char> encoded(encoded_max_size);
467
468 timer.start();
469
470 chassert(source_data.data() != nullptr); // Codec assumes that source buffer is not null.
471 const UInt32 encoded_size = codec.compress(
472 source_data.data(), static_cast<UInt32>(source_data.size()), encoded.data());
473 timer.report("encoding");
474
475 encoded.resize(encoded_size);
476
477 PODArray<char> decoded(source_data.size());
478
479 timer.start();
480 const UInt32 decoded_size = codec.decompress(
481 encoded.data(), static_cast<UInt32>(encoded.size()), decoded.data());
482 timer.report("decoding");
483
484 decoded.resize(decoded_size);
485
486 ASSERT_TRUE(EqualByteContainers(static_cast<uint8_t>(test_sequence.data_type->getSizeOfValueInMemory()), source_data, decoded));
487
488 const auto header_size = ICompressionCodec::getHeaderSize();
489 const auto compression_ratio = (encoded_size - header_size) / static_cast<double>(source_data.size());
490
491 if (expected_compression_ratio)
492 {
493 ASSERT_LE(compression_ratio, *expected_compression_ratio)
494 << "\n\tdecoded size: " << source_data.size()
495 << "\n\tencoded size: " << encoded_size
496 << "(no header: " << encoded_size - header_size << ")";
497 }
498}
499
500class CodecTest : public ::testing::TestWithParam<std::tuple<Codec, CodecTestSequence>>
501{

Callers 2

testTranscodingMethod · 0.85
TEST_PFunction · 0.85

Calls 10

EqualByteContainersFunction · 0.85
sizeMethod · 0.45
startMethod · 0.45
dataMethod · 0.45
compressMethod · 0.45
reportMethod · 0.45
resizeMethod · 0.45
decompressMethod · 0.45

Tested by

no test coverage detected