File tree Expand file tree Collapse file tree 1 file changed +34
-0
lines changed
parquet/src/arrow/record_reader Expand file tree Collapse file tree 1 file changed +34
-0
lines changed Original file line number Diff line number Diff line change @@ -392,8 +392,42 @@ fn iter_set_bits_rev(bytes: &[u8]) -> impl Iterator<Item = usize> + '_ {
392392mod 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 ( ) ;
You can’t perform that action at this time.
0 commit comments