MCPcopy Create free account
hub / github.com/apache/arrow / CheckStreamingDecompressor

Function CheckStreamingDecompressor

cpp/src/arrow/util/compression_test.cc:177–223  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175// Check the streaming decompressor against one-shot compression
176
177void CheckStreamingDecompressor(Codec* codec, const std::vector<uint8_t>& data) {
178 // Create compressed data
179 int64_t max_compressed_len = codec->MaxCompressedLen(data.size(), data.data());
180 std::vector<uint8_t> compressed(max_compressed_len);
181 int64_t compressed_size;
182 ASSERT_OK_AND_ASSIGN(
183 compressed_size,
184 codec->Compress(data.size(), data.data(), max_compressed_len, compressed.data()));
185 compressed.resize(compressed_size);
186
187 // Run streaming decompression
188 std::shared_ptr<Decompressor> decompressor;
189 ASSERT_OK_AND_ASSIGN(decompressor, codec->MakeDecompressor());
190
191 std::vector<uint8_t> decompressed;
192 int64_t decompressed_size = 0;
193 const uint8_t* input = compressed.data();
194 int64_t remaining = compressed.size();
195
196 decompressed.resize(10);
197 while (!decompressor->IsFinished()) {
198 // Feed a small amount each time
199 int64_t input_len = std::min(remaining, static_cast<int64_t>(23));
200 int64_t output_len = decompressed.size() - decompressed_size;
201 uint8_t* output = decompressed.data() + decompressed_size;
202 ASSERT_OK_AND_ASSIGN(auto result,
203 decompressor->Decompress(input_len, input, output_len, output));
204 ASSERT_LE(result.bytes_read, input_len);
205 ASSERT_LE(result.bytes_written, output_len);
206 ASSERT_TRUE(result.need_more_output || result.bytes_written > 0 ||
207 result.bytes_read > 0)
208 << "Decompression not progressing anymore";
209 if (result.need_more_output) {
210 decompressed.resize(decompressed.capacity() * 2);
211 }
212 decompressed_size += result.bytes_written;
213 input += result.bytes_read;
214 remaining -= result.bytes_read;
215 }
216 ASSERT_TRUE(decompressor->IsFinished());
217 ASSERT_EQ(remaining, 0);
218
219 // Check the decompressed data
220 decompressed.resize(decompressed_size);
221 ASSERT_EQ(data.size(), decompressed_size);
222 ASSERT_EQ(data, decompressed);
223}
224
225// Check the streaming compressor and decompressor together
226

Callers 1

TEST_PFunction · 0.85

Calls 9

resizeMethod · 0.80
ASSERT_OK_AND_ASSIGNFunction · 0.70
MaxCompressedLenMethod · 0.45
sizeMethod · 0.45
dataMethod · 0.45
CompressMethod · 0.45
MakeDecompressorMethod · 0.45
IsFinishedMethod · 0.45
capacityMethod · 0.45

Tested by

no test coverage detected