@@ -670,7 +670,7 @@ mod tests {
670670 use crate :: builder:: PrimitiveRunBuilder ;
671671 use crate :: cast:: AsArray ;
672672 use crate :: types:: { Int8Type , UInt32Type } ;
673- use crate :: { Int32Array , StringArray } ;
673+ use crate :: { Int16Array , Int32Array , StringArray } ;
674674
675675 fn build_input_array ( size : usize ) -> Vec < Option < i32 > > {
676676 // The input array is created by shuffling and repeating
@@ -1104,4 +1104,69 @@ mod tests {
11041104 assert_eq ! ( & n, & expected[ offset..offset + length] , "{offset} {length}" ) ;
11051105 }
11061106 }
1107+
1108+ #[ test]
1109+ fn test_run_array_eq_identical ( ) {
1110+ let run_ends1 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1111+ let values1 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1112+ let array1 = RunArray :: < Int32Type > :: try_new ( & run_ends1, & values1) . unwrap ( ) ;
1113+
1114+ let run_ends2 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1115+ let values2 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1116+ let array2 = RunArray :: < Int32Type > :: try_new ( & run_ends2, & values2) . unwrap ( ) ;
1117+
1118+ assert_eq ! ( array1, array2) ;
1119+ }
1120+
1121+ #[ test]
1122+ fn test_run_array_ne_different_run_ends ( ) {
1123+ let run_ends1 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1124+ let values1 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1125+ let array1 = RunArray :: < Int32Type > :: try_new ( & run_ends1, & values1) . unwrap ( ) ;
1126+
1127+ let run_ends2 = Int32Array :: from ( vec ! [ 1 , 4 , 6 ] ) ;
1128+ let values2 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1129+ let array2 = RunArray :: < Int32Type > :: try_new ( & run_ends2, & values2) . unwrap ( ) ;
1130+
1131+ assert_ne ! ( array1, array2) ;
1132+ }
1133+
1134+ #[ test]
1135+ fn test_run_array_ne_different_values ( ) {
1136+ let run_ends1 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1137+ let values1 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1138+ let array1 = RunArray :: < Int32Type > :: try_new ( & run_ends1, & values1) . unwrap ( ) ;
1139+
1140+ let run_ends2 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1141+ let values2 = StringArray :: from ( vec ! [ "a" , "b" , "d" ] ) ;
1142+ let array2 = RunArray :: < Int32Type > :: try_new ( & run_ends2, & values2) . unwrap ( ) ;
1143+
1144+ assert_ne ! ( array1, array2) ;
1145+ }
1146+
1147+ #[ test]
1148+ fn test_run_array_eq_with_nulls ( ) {
1149+ let run_ends1 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1150+ let values1 = StringArray :: from ( vec ! [ Some ( "a" ) , None , Some ( "c" ) ] ) ;
1151+ let array1 = RunArray :: < Int32Type > :: try_new ( & run_ends1, & values1) . unwrap ( ) ;
1152+
1153+ let run_ends2 = Int32Array :: from ( vec ! [ 2 , 4 , 6 ] ) ;
1154+ let values2 = StringArray :: from ( vec ! [ Some ( "a" ) , None , Some ( "c" ) ] ) ;
1155+ let array2 = RunArray :: < Int32Type > :: try_new ( & run_ends2, & values2) . unwrap ( ) ;
1156+
1157+ assert_eq ! ( array1, array2) ;
1158+ }
1159+
1160+ #[ test]
1161+ fn test_run_array_eq_different_run_end_types ( ) {
1162+ let run_ends_i16_1 = Int16Array :: from ( vec ! [ 2_i16 , 4 , 6 ] ) ;
1163+ let values_i16_1 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1164+ let array_i16_1 = RunArray :: < Int16Type > :: try_new ( & run_ends_i16_1, & values_i16_1) . unwrap ( ) ;
1165+
1166+ let run_ends_i16_2 = Int16Array :: from ( vec ! [ 2_i16 , 4 , 6 ] ) ;
1167+ let values_i16_2 = StringArray :: from ( vec ! [ "a" , "b" , "c" ] ) ;
1168+ let array_i16_2 = RunArray :: < Int16Type > :: try_new ( & run_ends_i16_2, & values_i16_2) . unwrap ( ) ;
1169+
1170+ assert_eq ! ( array_i16_1, array_i16_2) ;
1171+ }
11071172}
0 commit comments