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

Function TestBitPackedDecoder

cpp/src/arrow/util/rle_encoding_test.cc:339–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

337
338template <typename T>
339void TestBitPackedDecoder(std::vector<uint8_t> bytes, rle_size_t value_count,
340 rle_size_t bit_width, std::vector<T> expected) {
341 // Pre-requisite for this test
342 EXPECT_GT(value_count, 6);
343
344 const auto run =
345 BitPackedRun(bytes.data(), value_count, bit_width, /* .max_read_bytes= */ -1);
346
347 auto decoder = BitPackedRunDecoder<T>(run, bit_width);
348 std::vector<T> vals = {0, 0};
349
350 EXPECT_EQ(decoder.remaining(), value_count);
351
352 rle_size_t read = 0;
353 EXPECT_EQ(decoder.Get(vals.data(), bit_width), 1);
354 EXPECT_EQ(vals.at(0), expected.at(0 + read));
355 read += 1;
356 EXPECT_EQ(decoder.remaining(), value_count - read);
357
358 EXPECT_EQ(decoder.Advance(3), 3);
359 read += 3;
360 EXPECT_EQ(decoder.remaining(), value_count - read);
361
362 vals = {0, 0};
363 EXPECT_EQ(decoder.GetBatch(vals.data(), 2, bit_width), vals.size());
364 EXPECT_EQ(vals.at(0), expected.at(0 + read));
365 EXPECT_EQ(vals.at(1), expected.at(1 + read));
366 read += static_cast<decltype(read)>(vals.size());
367 EXPECT_EQ(decoder.remaining(), value_count - read);
368
369 // Exhaust iteration
370 EXPECT_EQ(decoder.Advance(value_count - read), value_count - read);
371 EXPECT_EQ(decoder.remaining(), 0);
372 EXPECT_EQ(decoder.Advance(1), 0);
373 vals = {0, 0};
374 EXPECT_EQ(decoder.Get(vals.data(), bit_width), 0);
375 EXPECT_EQ(vals.at(0), 0);
376
377 // Reset the decoder
378 decoder.Reset(run, bit_width);
379 read = 0;
380 EXPECT_EQ(decoder.remaining(), value_count);
381 vals = {0, 0};
382 EXPECT_EQ(decoder.GetBatch(vals.data(), 2, bit_width), vals.size());
383 EXPECT_EQ(vals.at(0), expected.at(0 + read));
384 EXPECT_EQ(vals.at(1), expected.at(1 + read));
385}
386
387TEST(BitPacked, BitPackedDecoder) {
388 // See parquet encoding for bytes layout

Callers

nothing calls this directly

Calls 8

BitPackedRunClass · 0.85
dataMethod · 0.45
remainingMethod · 0.45
GetMethod · 0.45
AdvanceMethod · 0.45
GetBatchMethod · 0.45
sizeMethod · 0.45
ResetMethod · 0.45

Tested by

no test coverage detected