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

Function TestRleBitPackedParser

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

Source from the content-addressed store, hash-verified

410
411template <typename T>
412void TestRleBitPackedParser(std::vector<uint8_t> bytes, rle_size_t bit_width,
413 std::vector<T> expected) {
414 auto parser =
415 RleBitPackedParser(bytes.data(), static_cast<rle_size_t>(bytes.size()), bit_width);
416 EXPECT_FALSE(parser.exhausted());
417
418 // Try to decode all data of all runs in the decoded vector
419 decltype(expected) decoded = {};
420 auto rle_decoder = RleRunDecoder<T>();
421 auto bit_packed_decoder = BitPackedRunDecoder<T>();
422
423 struct {
424 decltype(rle_decoder)* rle_decoder_ptr_;
425 decltype(bit_packed_decoder)* bit_packed_decoder_ptr_;
426 decltype(decoded)* decoded_ptr_;
427 decltype(bit_width) bit_width_;
428
429 auto OnRleRun(RleRun run) {
430 rle_decoder_ptr_->Reset(run, bit_width_);
431
432 const auto n_decoded = decoded_ptr_->size();
433 const auto n_to_decode = rle_decoder_ptr_->remaining();
434 decoded_ptr_->resize(n_decoded + n_to_decode);
435 EXPECT_EQ(rle_decoder_ptr_->GetBatch(decoded_ptr_->data() + n_decoded, n_to_decode,
436 bit_width_),
437 n_to_decode);
438 EXPECT_EQ(rle_decoder_ptr_->remaining(), 0);
439
440 return RleBitPackedParser::ControlFlow::Continue;
441 }
442
443 auto OnBitPackedRun(BitPackedRun run) {
444 bit_packed_decoder_ptr_->Reset(run, bit_width_);
445
446 const auto n_decoded = decoded_ptr_->size();
447 const auto n_to_decode = bit_packed_decoder_ptr_->remaining();
448 decoded_ptr_->resize(n_decoded + n_to_decode);
449 EXPECT_EQ(bit_packed_decoder_ptr_->GetBatch(decoded_ptr_->data() + n_decoded,
450 n_to_decode, bit_width_),
451 n_to_decode);
452 EXPECT_EQ(bit_packed_decoder_ptr_->remaining(), 0);
453
454 return RleBitPackedParser::ControlFlow::Continue;
455 }
456 } handler{&rle_decoder, &bit_packed_decoder, &decoded, bit_width};
457
458 // Iterate over all runs
459 parser.Parse(handler);
460
461 EXPECT_TRUE(parser.exhausted());
462 EXPECT_EQ(decoded.size(), expected.size());
463 EXPECT_EQ(decoded, expected);
464}
465
466void TestRleBitPackedParserError(std::span<const uint8_t> bytes, rle_size_t bit_width) {
467 auto parser =

Callers

nothing calls this directly

Calls 5

RleBitPackedParserClass · 0.85
dataMethod · 0.45
sizeMethod · 0.45
exhaustedMethod · 0.45
ParseMethod · 0.45

Tested by

no test coverage detected