| 1255 | |
| 1256 | #[test] |
| 1257 | fn test_try_new() { |
| 1258 | let offsets = OffsetBuffer::new(vec![0, 1, 4, 5].into()); |
| 1259 | let values = Int32Array::new(vec![1, 2, 3, 4, 5].into(), None); |
| 1260 | let values = Arc::new(values) as ArrayRef; |
| 1261 | |
| 1262 | let field = Arc::new(Field::new("element", DataType::Int32, false)); |
| 1263 | ListArray::new(field.clone(), offsets.clone(), values.clone(), None); |
| 1264 | |
| 1265 | let nulls = NullBuffer::new_null(3); |
| 1266 | ListArray::new(field.clone(), offsets, values.clone(), Some(nulls)); |
| 1267 | |
| 1268 | let nulls = NullBuffer::new_null(3); |
| 1269 | let offsets = OffsetBuffer::new(vec![0, 1, 2, 4, 5].into()); |
| 1270 | let err = LargeListArray::try_new(field, offsets.clone(), values.clone(), Some(nulls)) |
| 1271 | .unwrap_err(); |
| 1272 | |
| 1273 | assert_eq!( |
| 1274 | err.to_string(), |
| 1275 | "Invalid argument error: Incorrect length of null buffer for LargeListArray, expected 4 got 3" |
| 1276 | ); |
| 1277 | |
| 1278 | let field = Arc::new(Field::new("element", DataType::Int64, false)); |
| 1279 | let err = LargeListArray::try_new(field.clone(), offsets.clone(), values.clone(), None) |
| 1280 | .unwrap_err(); |
| 1281 | |
| 1282 | assert_eq!( |
| 1283 | err.to_string(), |
| 1284 | "Invalid argument error: LargeListArray expected data type Int64 got Int32 for \"element\"" |
| 1285 | ); |
| 1286 | |
| 1287 | let nulls = NullBuffer::new_null(7); |
| 1288 | let values = Int64Array::new(vec![0; 7].into(), Some(nulls)); |
| 1289 | let values = Arc::new(values); |
| 1290 | |
| 1291 | let err = |
| 1292 | LargeListArray::try_new(field, offsets.clone(), values.clone(), None).unwrap_err(); |
| 1293 | |
| 1294 | assert_eq!( |
| 1295 | err.to_string(), |
| 1296 | "Invalid argument error: Non-nullable field of LargeListArray \"element\" cannot contain nulls" |
| 1297 | ); |
| 1298 | |
| 1299 | let field = Arc::new(Field::new("element", DataType::Int64, true)); |
| 1300 | LargeListArray::new(field.clone(), offsets.clone(), values, None); |
| 1301 | |
| 1302 | let values = Int64Array::new(vec![0; 2].into(), None); |
| 1303 | let err = LargeListArray::try_new(field, offsets, Arc::new(values), None).unwrap_err(); |
| 1304 | |
| 1305 | assert_eq!( |
| 1306 | err.to_string(), |
| 1307 | "Invalid argument error: Max offset of 5 exceeds length of values 2" |
| 1308 | ); |
| 1309 | } |
| 1310 | |
| 1311 | #[test] |
| 1312 | fn test_from_fixed_size_list() { |