MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / integerPackingMultiPage

Function integerPackingMultiPage

test/storage/compression_test.cpp:440–475  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

438
439template<typename T>
440void integerPackingMultiPage(const std::vector<T>& src) {
441 auto alg = IntegerBitpacking<T>();
442 auto pageSize = 4096;
443 const auto& [min, max] = std::minmax_element(src.begin(), src.end());
444 auto metadata =
445 CompressionMetadata(StorageValue(*min), StorageValue(*max), alg.getCompressionType());
446 auto numValuesPerPage = metadata.numValues(pageSize, LogicalType(LogicalTypeID::INT64));
447 int64_t numValuesRemaining = src.size();
448 const uint8_t* srcCursor = (uint8_t*)src.data();
449 auto pages = src.size() / numValuesPerPage + 1;
450 std::vector<std::vector<uint8_t>> dest(pages, std::vector<uint8_t>(pageSize));
451 size_t pageNum = 0;
452 while (numValuesRemaining > 0) {
453 ASSERT_LT(pageNum, pages);
454 alg.compressNextPage(srcCursor, numValuesRemaining, dest[pageNum++].data(), pageSize,
455 metadata);
456 numValuesRemaining -= numValuesPerPage;
457 }
458 ASSERT_EQ(srcCursor, (uint8_t*)(src.data() + src.size()));
459 for (auto i = 0u; i < src.size(); i++) {
460 auto page = i / numValuesPerPage;
461 auto indexInPage = i % numValuesPerPage;
462 T value;
463 alg.decompressFromPage(dest[page].data(), indexInPage, (uint8_t*)&value, 0, 1 /*numValues*/,
464 metadata);
465 EXPECT_EQ(src[i] - value, 0);
466 EXPECT_EQ(src[i], value);
467 }
468 std::vector<T> decompressed(src.size());
469 for (auto i = 0u; i < src.size(); i += numValuesPerPage) {
470 auto page = i / numValuesPerPage;
471 alg.decompressFromPage(dest[page].data(), 0, (uint8_t*)decompressed.data(), i,
472 std::min(numValuesPerPage, (uint64_t)src.size() - i), metadata);
473 }
474 ASSERT_EQ(decompressed, src);
475}
476
477TEST(CompressionTests, IntegerPackingMultiPage64) {
478 int64_t numValues = 10000;

Callers 1

TESTFunction · 0.85

Calls 11

StorageValueFunction · 0.85
CompressionMetadataFunction · 0.50
LogicalTypeClass · 0.50
beginMethod · 0.45
endMethod · 0.45
getCompressionTypeMethod · 0.45
numValuesMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45
compressNextPageMethod · 0.45
decompressFromPageMethod · 0.45

Tested by

no test coverage detected