| 727 | } |
| 728 | |
| 729 | void TestPageSerde::TestPageCompressionRoundTrip(const std::vector<int>& page_sizes) { |
| 730 | auto codec_types = GetSupportedCodecTypes(); |
| 731 | |
| 732 | const int32_t num_rows = 32; // dummy value |
| 733 | data_page_header_.num_values = num_rows; |
| 734 | |
| 735 | std::vector<std::vector<uint8_t>> faux_data; |
| 736 | int num_pages = static_cast<int>(page_sizes.size()); |
| 737 | faux_data.resize(num_pages); |
| 738 | for (int i = 0; i < num_pages; ++i) { |
| 739 | test::random_bytes(page_sizes[i], 0, &faux_data[i]); |
| 740 | } |
| 741 | for (auto codec_type : codec_types) { |
| 742 | auto codec = GetCodec(codec_type); |
| 743 | |
| 744 | std::vector<uint8_t> buffer; |
| 745 | for (int i = 0; i < num_pages; ++i) { |
| 746 | const uint8_t* data = faux_data[i].data(); |
| 747 | int data_size = static_cast<int>(faux_data[i].size()); |
| 748 | |
| 749 | int64_t max_compressed_size = codec->MaxCompressedLen(data_size, data); |
| 750 | buffer.resize(max_compressed_size); |
| 751 | |
| 752 | int64_t actual_size; |
| 753 | ASSERT_OK_AND_ASSIGN( |
| 754 | actual_size, codec->Compress(data_size, data, max_compressed_size, &buffer[0])); |
| 755 | |
| 756 | ASSERT_NO_FATAL_FAILURE( |
| 757 | WriteDataPageHeader(1024, data_size, static_cast<int32_t>(actual_size))); |
| 758 | ASSERT_OK(out_stream_->Write(buffer.data(), actual_size)); |
| 759 | } |
| 760 | |
| 761 | InitSerializedPageReader(num_rows * num_pages, codec_type); |
| 762 | |
| 763 | std::shared_ptr<Page> page; |
| 764 | const DataPageV1* data_page; |
| 765 | for (int i = 0; i < num_pages; ++i) { |
| 766 | int data_size = static_cast<int>(faux_data[i].size()); |
| 767 | page = page_reader_->NextPage(); |
| 768 | data_page = static_cast<const DataPageV1*>(page.get()); |
| 769 | ASSERT_EQ(data_size, data_page->size()); |
| 770 | ASSERT_EQ(0, memcmp(faux_data[i].data(), data_page->data(), data_size)); |
| 771 | } |
| 772 | |
| 773 | ResetStream(); |
| 774 | } |
| 775 | } |
| 776 | |
| 777 | TEST_F(TestPageSerde, Compression) { |
| 778 | std::vector<int> page_sizes; |
no test coverage detected