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

Function TestRleDecoder

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

Source from the content-addressed store, hash-verified

277
278template <typename T>
279void TestRleDecoder(std::vector<uint8_t> bytes, rle_size_t value_count,
280 rle_size_t bit_width, T expected_value) {
281 // Pre-requisite for this test
282 EXPECT_GT(value_count, 6);
283
284 const auto run = RleRun(bytes.data(), value_count, bit_width);
285
286 auto decoder = RleRunDecoder<T>(run, bit_width);
287 std::vector<T> vals = {0, 0};
288
289 EXPECT_EQ(decoder.remaining(), value_count);
290
291 rle_size_t read = 0;
292 EXPECT_EQ(decoder.Get(vals.data(), bit_width), 1);
293 read += 1;
294 EXPECT_EQ(vals.at(0), expected_value);
295 EXPECT_EQ(decoder.remaining(), value_count - read);
296
297 EXPECT_EQ(decoder.Advance(3), 3);
298 read += 3;
299 EXPECT_EQ(decoder.remaining(), value_count - read);
300
301 vals = {0, 0};
302 EXPECT_EQ(decoder.GetBatch(vals.data(), 2, bit_width), vals.size());
303 EXPECT_EQ(vals.at(0), expected_value);
304 EXPECT_EQ(vals.at(1), expected_value);
305 read += static_cast<decltype(read)>(vals.size());
306 EXPECT_EQ(decoder.remaining(), value_count - read);
307
308 // Exhaust iteration
309 EXPECT_EQ(decoder.Advance(value_count - read), value_count - read);
310 EXPECT_EQ(decoder.remaining(), 0);
311 EXPECT_EQ(decoder.Advance(1), 0);
312 vals = {0, 0};
313 EXPECT_EQ(decoder.Get(vals.data(), bit_width), 0);
314 EXPECT_EQ(vals.at(0), 0);
315
316 // Reset the decoder
317 decoder.Reset(run, bit_width);
318 EXPECT_EQ(decoder.remaining(), value_count);
319 vals = {0, 0};
320 EXPECT_EQ(decoder.GetBatch(vals.data(), 2, bit_width), vals.size());
321 EXPECT_EQ(vals.at(0), expected_value);
322 EXPECT_EQ(vals.at(1), expected_value);
323}
324
325TEST(Rle, RleDecoder) {
326 TestRleDecoder<uint8_t>({21, 0, 0}, /* value_count= */ 23, /* bit_width= */ 5,

Callers

nothing calls this directly

Calls 8

RleRunClass · 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