Skip to content

Commit b001f11

Browse files
committed
Add packed decoder test
1 parent 59846eb commit b001f11

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

parquet/src/arrow/record_reader/definition_levels.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,8 +392,42 @@ fn iter_set_bits_rev(bytes: &[u8]) -> impl Iterator<Item = usize> + '_ {
392392
mod tests {
393393
use super::*;
394394

395+
use crate::encodings::rle::RleEncoder;
395396
use rand::{thread_rng, Rng, RngCore};
396397

398+
#[test]
399+
fn test_packed_decoder() {
400+
let mut rng = thread_rng();
401+
let len: usize = rng.gen_range(512..1024);
402+
403+
let mut expected = BooleanBufferBuilder::new(len);
404+
let mut encoder = RleEncoder::new(1, 1024);
405+
for _ in 0..len {
406+
let bool = rng.gen_bool(0.8);
407+
assert!(encoder.put(bool as u64).unwrap());
408+
expected.append(bool);
409+
}
410+
assert_eq!(expected.len(), len);
411+
412+
let encoded = encoder.consume().unwrap();
413+
let mut decoder = PackedDecoder::new(Encoding::RLE, ByteBufferPtr::new(encoded));
414+
415+
// Decode data in random length intervals
416+
let mut decoded = BooleanBufferBuilder::new(len);
417+
loop {
418+
let remaining = len - decoded.len();
419+
if remaining == 0 {
420+
break;
421+
}
422+
423+
let to_read = rng.gen_range(1..=remaining);
424+
decoder.read(&mut decoded, to_read).unwrap();
425+
}
426+
427+
assert_eq!(decoded.len(), len);
428+
assert_eq!(decoded.as_slice(), expected.as_slice());
429+
}
430+
397431
#[test]
398432
fn test_bit_fns() {
399433
let mut rng = thread_rng();

0 commit comments

Comments
 (0)