rluvaton commented on code in PR #9486:
URL: https://github.com/apache/arrow-rs/pull/9486#discussion_r2901621912


##########
arrow-row/src/lib.rs:
##########
@@ -4041,6 +4099,480 @@ mod tests {
         assert_eq!(&back[1], &second);
     }
 
+    #[test]
+    fn test_single_map() {
+        let mut builder = MapBuilder::new(None, StringBuilder::new(), 
Int32Builder::new());
+        // Entry 0: {"hello": 1, "world": 2}
+        builder.keys().append_value("hello");
+        builder.values().append_value(1);
+        builder.keys().append_value("world");
+        builder.values().append_value(2);
+        builder.append(true).unwrap();
+        // Entry 1: {"foo": 3}
+        builder.keys().append_value("foo");
+        builder.values().append_value(3);
+        builder.append(true).unwrap();
+        // Entry 2: {} (empty map)
+        builder.append(true).unwrap();
+        // Entry 3: null (with masked data)
+        builder.keys().append_value("masked_key");
+        builder.values().append_value(999);
+        builder.append(false).unwrap();
+        // Entry 4: {"bar": null}
+        builder.keys().append_value("bar");
+        builder.values().append_null();
+        builder.append(true).unwrap();
+        // Entry 5: null (with different masked data)
+        builder.keys().append_value("other_masked");
+        builder.values().append_value(0);
+        builder.append(false).unwrap();
+        // Entry 6: {"a": 10, "b": 20, "c": 30}
+        builder.keys().append_value("a");
+        builder.values().append_value(10);
+        builder.keys().append_value("b");
+        builder.values().append_value(20);
+        builder.keys().append_value("c");
+        builder.values().append_value(30);
+        builder.append(true).unwrap();
+
+        let map = Arc::new(builder.finish()) as ArrayRef;
+        let d = map.data_type().clone();
+
+        let converter = 
RowConverter::new(vec![SortField::new(d.clone())]).unwrap();
+
+        let rows = converter.convert_columns(&[Arc::clone(&map)]).unwrap();
+        assert_eq!(rows.row(3), rows.row(5)); // null = null (different masked 
values)
+
+        let back = converter.convert_rows(&rows).unwrap();
+        assert_eq!(back.len(), 1);
+        back[0].to_data().validate_full().unwrap();
+        assert_eq!(&back[0], &map);
+
+        let sliced_map = map.slice(1, 5);
+        let rows_on_sliced = converter
+            .convert_columns(&[Arc::clone(&sliced_map)])
+            .unwrap();
+
+        let back = converter.convert_rows(&rows_on_sliced).unwrap();
+        assert_eq!(back.len(), 1);
+        back[0].to_data().validate_full().unwrap();
+        assert_eq!(&back[0], &sliced_map);
+    }
+
+    #[test]
+    fn two_maps_with_different_keys_order_should_still_match() {
+        // { "hello": 1, "world": 2 }
+        let map_1 = {
+            let mut builder = MapBuilder::new(None, StringBuilder::new(), 
Int32Builder::new());
+
+            builder.keys().append_value("hello");
+            builder.values().append_value(1);
+
+            builder.keys().append_value("world");
+            builder.values().append_value(2);
+
+            builder.append(true).unwrap();
+
+            Arc::new(builder.finish()) as ArrayRef
+        };
+
+        // { "world": 2, "hello": 1 }
+        let map_2 = {
+            let mut builder = MapBuilder::new(None, StringBuilder::new(), 
Int32Builder::new());
+
+            builder.keys().append_value("world");
+            builder.values().append_value(2);
+
+            builder.keys().append_value("hello");
+            builder.values().append_value(1);
+
+            builder.append(true).unwrap();
+
+            Arc::new(builder.finish()) as ArrayRef
+        };
+
+        let converter = 
RowConverter::new(vec![SortField::new(map_1.data_type().clone())]).unwrap();
+
+        let map_1_rows = 
converter.convert_columns(&[Arc::clone(&map_1)]).unwrap();
+        let map_2_rows = 
converter.convert_columns(&[Arc::clone(&map_2)]).unwrap();
+
+        assert_eq!(map_1_rows.row(0), map_2_rows.row(0));
+
+        // TODO - what would the expected returned array be?
+        // if they are the same rows they will produce the same output, TODO - 
this should be noted if we decide to go that path
+    }

Review Comment:
   Added this test as pointed by @Weijun-H we have a problem with the keys 
ordering



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to