@@ -91,8 +91,8 @@ mod tests {
91
91
ArrayRef , BinaryArray , BooleanArray , Date32Array , Date64Array , Decimal128Array ,
92
92
Decimal256Array , Decimal32Array , Decimal64Array , DictionaryArray , DurationMicrosecondArray ,
93
93
DurationMillisecondArray , DurationNanosecondArray , DurationSecondArray ,
94
- FixedSizeBinaryBuilder , Float16Array , Float32Array , Float64Array , GenericByteBuilder ,
95
- GenericByteViewBuilder , Int16Array , Int32Array , Int64Array , Int8Array ,
94
+ FixedSizeBinaryBuilder , FixedSizeListBuilder , Float16Array , Float32Array , Float64Array ,
95
+ GenericByteBuilder , GenericByteViewBuilder , Int16Array , Int32Array , Int64Array , Int8Array ,
96
96
IntervalDayTimeArray , IntervalMonthDayNanoArray , IntervalYearMonthArray , LargeListArray ,
97
97
LargeListViewBuilder , LargeStringArray , ListArray , ListViewBuilder , MapArray , NullArray ,
98
98
StringArray , StringRunBuilder , StringViewArray , StructArray , Time32MillisecondArray ,
@@ -1407,6 +1407,98 @@ mod tests {
1407
1407
) ;
1408
1408
}
1409
1409
1410
+ #[ test]
1411
+ fn test_cast_to_variant_fixed_size_list ( ) {
1412
+ let mut builder = FixedSizeListBuilder :: new ( Int32Array :: builder ( 0 ) , 2 ) ;
1413
+ builder. values ( ) . append_value ( 0 ) ;
1414
+ builder. values ( ) . append_value ( 1 ) ;
1415
+ builder. append ( true ) ; // First list: [0, 1]
1416
+
1417
+ builder. values ( ) . append_null ( ) ;
1418
+ builder. values ( ) . append_value ( 3 ) ;
1419
+ builder. append ( true ) ; // Second list: [null, 3]
1420
+
1421
+ builder. values ( ) . append_value ( 4 ) ;
1422
+ builder. values ( ) . append_null ( ) ;
1423
+ builder. append ( false ) ; // Third list: null
1424
+
1425
+ builder. values ( ) . append_nulls ( 2 ) ;
1426
+ builder. append ( true ) ; // Last list: [null, null]
1427
+
1428
+ let fixed_size_list_array = builder. finish ( ) ;
1429
+
1430
+ // Expected values
1431
+ let ( metadata, value) = {
1432
+ let mut builder = VariantBuilder :: new ( ) ;
1433
+ let mut list = builder. new_list ( ) ;
1434
+ list. append_value ( 0i32 ) ;
1435
+ list. append_value ( 1i32 ) ;
1436
+ list. finish ( ) ;
1437
+ builder. finish ( )
1438
+ } ;
1439
+ let variant0 = Variant :: new ( & metadata, & value) ;
1440
+
1441
+ let ( metadata, value) = {
1442
+ let mut builder = VariantBuilder :: new ( ) ;
1443
+ let mut list = builder. new_list ( ) ;
1444
+ list. append_null ( ) ;
1445
+ list. append_value ( 3i32 ) ;
1446
+ list. finish ( ) ;
1447
+ builder. finish ( )
1448
+ } ;
1449
+ let variant1 = Variant :: new ( & metadata, & value) ;
1450
+
1451
+ let ( metadata, value) = {
1452
+ let mut builder = VariantBuilder :: new ( ) ;
1453
+ let mut list = builder. new_list ( ) ;
1454
+ list. append_null ( ) ;
1455
+ list. append_null ( ) ;
1456
+ list. finish ( ) ;
1457
+ builder. finish ( )
1458
+ } ;
1459
+ let variant3 = Variant :: new ( & metadata, & value) ;
1460
+
1461
+ run_test (
1462
+ Arc :: new ( fixed_size_list_array) ,
1463
+ vec ! [ Some ( variant0) , Some ( variant1) , None , Some ( variant3) ] ,
1464
+ ) ;
1465
+ }
1466
+
1467
+ #[ test]
1468
+ fn test_cast_to_variant_sliced_fixed_size_list ( ) {
1469
+ // Create a FixedSizeListArray with size 2
1470
+ let mut builder = FixedSizeListBuilder :: new ( Int64Array :: builder ( 0 ) , 2 ) ;
1471
+ builder. values ( ) . append_value ( 0 ) ;
1472
+ builder. values ( ) . append_value ( 1 ) ;
1473
+ builder. append ( true ) ; // First list: [0, 1]
1474
+
1475
+ builder. values ( ) . append_null ( ) ;
1476
+ builder. values ( ) . append_value ( 3 ) ;
1477
+ builder. append ( true ) ; // Second list: [null, 3]
1478
+
1479
+ builder. values ( ) . append_value ( 4 ) ;
1480
+ builder. values ( ) . append_null ( ) ;
1481
+ builder. append ( false ) ; // Third list: null
1482
+
1483
+ let fixed_size_list_array = builder. finish ( ) ;
1484
+
1485
+ // Expected value for slice(1, 2) - should get the second and third elements
1486
+ let ( metadata, value) = {
1487
+ let mut builder = VariantBuilder :: new ( ) ;
1488
+ let mut list = builder. new_list ( ) ;
1489
+ list. append_null ( ) ;
1490
+ list. append_value ( 3i64 ) ;
1491
+ list. finish ( ) ;
1492
+ builder. finish ( )
1493
+ } ;
1494
+ let variant = Variant :: new ( & metadata, & value) ;
1495
+
1496
+ run_test (
1497
+ Arc :: new ( fixed_size_list_array. slice ( 1 , 2 ) ) ,
1498
+ vec ! [ Some ( variant) , None ] ,
1499
+ ) ;
1500
+ }
1501
+
1410
1502
#[ test]
1411
1503
fn test_cast_to_variant_struct ( ) {
1412
1504
// Test a simple struct with two fields: id (int64) and age (int32)
0 commit comments