MCPcopy Create free account
hub / github.com/apache/arrow-rs / test_skip_rep_levels

Function test_skip_rep_levels

parquet/src/column/reader/decoder.rs:517–564  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

515
516 #[test]
517 fn test_skip_rep_levels() {
518 for _ in 0..10 {
519 let mut rng = rng();
520 let total_len = 10000_usize;
521 let mut encoded: Vec<i16> = (0..total_len).map(|_| rng.random_range(0..5)).collect();
522 encoded[0] = 0;
523 let mut encoder = RleEncoder::new(3, 1024);
524 for v in &encoded {
525 encoder.put(*v as _)
526 }
527 let data = Bytes::from(encoder.consume());
528
529 let mut decoder = RepetitionLevelDecoderImpl::new(5);
530 decoder.set_data(Encoding::RLE, data).unwrap();
531
532 let total_records = encoded.iter().filter(|x| **x == 0).count();
533 let mut remaining_records = total_records;
534 let mut remaining_levels = encoded.len();
535 loop {
536 let skip = rng.random_bool(0.5);
537 let records = rng.random_range(1..=remaining_records.min(5));
538 let (records_read, levels_read) = if skip {
539 decoder.skip_rep_levels(records, remaining_levels).unwrap()
540 } else {
541 let mut decoded = Vec::new();
542 let (records_read, levels_read) = decoder
543 .read_rep_levels(&mut decoded, records, remaining_levels)
544 .unwrap();
545
546 assert_eq!(
547 decoded,
548 encoded[encoded.len() - remaining_levels..][..levels_read]
549 );
550 (records_read, levels_read)
551 };
552
553 remaining_levels = remaining_levels.checked_sub(levels_read).unwrap();
554 if remaining_levels == 0 {
555 assert_eq!(records_read + 1, records);
556 assert_eq!(records, remaining_records);
557 break;
558 }
559 assert_eq!(records_read, records);
560 remaining_records -= records;
561 assert_ne!(remaining_records, 0);
562 }
563 }
564 }
565}

Callers

nothing calls this directly

Calls 11

collectMethod · 0.80
filterMethod · 0.80
skip_rep_levelsMethod · 0.80
read_rep_levelsMethod · 0.80
putMethod · 0.45
consumeMethod · 0.45
set_dataMethod · 0.45
countMethod · 0.45
iterMethod · 0.45
lenMethod · 0.45
checked_subMethod · 0.45

Tested by

no test coverage detected