@@ -629,6 +629,57 @@ mod tests {
629
629
test_equal ( & a, & b, false ) ;
630
630
}
631
631
632
+ #[ test]
633
+ fn test_empty_offsets_list_equal ( ) {
634
+ let empty: Vec < i32 > = vec ! [ ] ;
635
+ let values = Int32Array :: from ( empty) ;
636
+ let empty_offsets: [ u8 ; 0 ] = [ ] ;
637
+
638
+ let a = ArrayDataBuilder :: new ( DataType :: List ( Box :: new ( Field :: new (
639
+ "item" ,
640
+ DataType :: Int32 ,
641
+ true ,
642
+ ) ) ) )
643
+ . len ( 0 )
644
+ . add_buffer ( Buffer :: from ( & empty_offsets) )
645
+ . add_child_data ( values. data ( ) . clone ( ) )
646
+ . null_bit_buffer ( Some ( Buffer :: from ( & empty_offsets) ) )
647
+ . build ( )
648
+ . unwrap ( ) ;
649
+
650
+ let b = ArrayDataBuilder :: new ( DataType :: List ( Box :: new ( Field :: new (
651
+ "item" ,
652
+ DataType :: Int32 ,
653
+ true ,
654
+ ) ) ) )
655
+ . len ( 0 )
656
+ . add_buffer ( Buffer :: from ( & empty_offsets) )
657
+ . add_child_data ( values. data ( ) . clone ( ) )
658
+ . null_bit_buffer ( Some ( Buffer :: from ( & empty_offsets) ) )
659
+ . build ( )
660
+ . unwrap ( ) ;
661
+
662
+ test_equal ( & a, & b, true ) ;
663
+
664
+ let c = ArrayDataBuilder :: new ( DataType :: List ( Box :: new ( Field :: new (
665
+ "item" ,
666
+ DataType :: Int32 ,
667
+ true ,
668
+ ) ) ) )
669
+ . len ( 0 )
670
+ . add_buffer ( Buffer :: from ( vec ! [ 0i32 , 2 , 3 , 4 , 6 , 7 , 8 ] . to_byte_slice ( ) ) )
671
+ . add_child_data (
672
+ Int32Array :: from ( vec ! [ 1 , 2 , -1 , -2 , 3 , 4 , -3 , -4 ] )
673
+ . data ( )
674
+ . clone ( ) ,
675
+ )
676
+ . null_bit_buffer ( Some ( Buffer :: from ( vec ! [ 0b00001001 ] ) ) )
677
+ . build ( )
678
+ . unwrap ( ) ;
679
+
680
+ test_equal ( & a, & c, true ) ;
681
+ }
682
+
632
683
// Test the case where null_count > 0
633
684
#[ test]
634
685
fn test_list_null ( ) {
0 commit comments