| 1305 | |
| 1306 | #[test] |
| 1307 | fn test_dense_mixed_with_str() { |
| 1308 | let string_array = StringArray::from(vec!["foo", "bar", "baz"]); |
| 1309 | let int_array = Int32Array::from(vec![5, 6]); |
| 1310 | let float_array = Float64Array::from(vec![10.0]); |
| 1311 | |
| 1312 | let type_ids = [1, 0, 0, 2, 0, 1].into_iter().collect::<ScalarBuffer<i8>>(); |
| 1313 | let offsets = [0, 0, 1, 0, 2, 1] |
| 1314 | .into_iter() |
| 1315 | .collect::<ScalarBuffer<i32>>(); |
| 1316 | |
| 1317 | let fields = [ |
| 1318 | (0, Arc::new(Field::new("A", DataType::Utf8, false))), |
| 1319 | (1, Arc::new(Field::new("B", DataType::Int32, false))), |
| 1320 | (2, Arc::new(Field::new("C", DataType::Float64, false))), |
| 1321 | ] |
| 1322 | .into_iter() |
| 1323 | .collect::<UnionFields>(); |
| 1324 | let children = [ |
| 1325 | Arc::new(string_array) as Arc<dyn Array>, |
| 1326 | Arc::new(int_array), |
| 1327 | Arc::new(float_array), |
| 1328 | ] |
| 1329 | .into_iter() |
| 1330 | .collect(); |
| 1331 | let array = |
| 1332 | UnionArray::try_new(fields, type_ids.clone(), Some(offsets.clone()), children).unwrap(); |
| 1333 | |
| 1334 | // Check type ids |
| 1335 | assert_eq!(*array.type_ids(), type_ids); |
| 1336 | for (i, id) in type_ids.iter().enumerate() { |
| 1337 | assert_eq!(id, &array.type_id(i)); |
| 1338 | } |
| 1339 | |
| 1340 | // Check offsets |
| 1341 | assert_eq!(*array.offsets().unwrap(), offsets); |
| 1342 | for (i, id) in offsets.iter().enumerate() { |
| 1343 | assert_eq!(*id as usize, array.value_offset(i)); |
| 1344 | } |
| 1345 | |
| 1346 | // Check values |
| 1347 | assert_eq!(6, array.len()); |
| 1348 | |
| 1349 | let slot = array.value(0); |
| 1350 | let value = slot.as_any().downcast_ref::<Int32Array>().unwrap().value(0); |
| 1351 | assert_eq!(5, value); |
| 1352 | |
| 1353 | let slot = array.value(1); |
| 1354 | let value = slot |
| 1355 | .as_any() |
| 1356 | .downcast_ref::<StringArray>() |
| 1357 | .unwrap() |
| 1358 | .value(0); |
| 1359 | assert_eq!("foo", value); |
| 1360 | |
| 1361 | let slot = array.value(2); |
| 1362 | let value = slot |
| 1363 | .as_any() |
| 1364 | .downcast_ref::<StringArray>() |