This is an automated email from the ASF dual-hosted git repository.

Jefffrey pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new 149b3ab23d [Variant] Simplify homogeneous VariantArray test fixtures 
(#11272)
149b3ab23d is described below

commit 149b3ab23dc360e9452b2f854b01d2f5fed06f43
Author: Kosta Tarasov <[email protected]>
AuthorDate: Wed Sep 30 04:54:46 2026 -0400

    [Variant] Simplify homogeneous VariantArray test fixtures (#11272)
    
    # Which issue does this PR close?
    
    Follow-up to #11053.
    
    # Rationale for this change
    
    #11053 allows `VariantArray` to collect `Option<T>` values directly when
    `T` converts into `Variant`. Homogeneous test fixtures can now use
    `VariantArray::from_iter([Some(42_i64), None])`, removing explicit
    `Variant` conversions and row-by-row builder setup.
    
    # What changes are included in this PR?
    
    Simplify fixtures in the variant array iterator, extraction/conversion,
    shredding, and unshredding tests. Preserve value types, row order, null
    semantics, and existing assertions. Tests that exercise builders
    themselves remain unchanged.
    
    # Are these changes tested?
    
    Existing tests cover the fixture changes:
    
    - `cargo test -p parquet-variant-compute --lib` — 369 passed.
    - `cargo clippy -p parquet-variant-compute --all-targets -- -D warnings`
    — passed.
    - `cargo fmt --all -- --check` — passed.
    
    # Are there any user-facing changes?
    
    No. This is a test-only cleanup; production code and public APIs are
    unchanged.
---
 parquet-variant-compute/src/shred_variant.rs   |   6 +-
 parquet-variant-compute/src/unshred_variant.rs |  29 +--
 parquet-variant-compute/src/variant_array.rs   |  20 +-
 parquet-variant-compute/src/variant_get.rs     | 300 +++++++++----------------
 4 files changed, 122 insertions(+), 233 deletions(-)

diff --git a/parquet-variant-compute/src/shred_variant.rs 
b/parquet-variant-compute/src/shred_variant.rs
index 2ad0342ed2..fa603d4f2e 100644
--- a/parquet-variant-compute/src/shred_variant.rs
+++ b/parquet-variant-compute/src/shred_variant.rs
@@ -1172,7 +1172,7 @@ mod tests {
     fn test_already_shredded_input_error() {
         // Create a VariantArray that already has typed_value_field
         // First create a valid VariantArray, then extract its parts to 
construct a shredded one
-        let temp_array = 
VariantArray::from_iter(vec![Some(Variant::from("test"))]);
+        let temp_array = VariantArray::from_iter([Some("test")]);
         let metadata = temp_array.metadata_column().clone();
         let value = temp_array.value_column().clone();
         let typed_value = Arc::new(Int64Array::from(vec![42])) as ArrayRef;
@@ -1206,7 +1206,7 @@ mod tests {
     fn test_invalid_fixed_size_binary_shredding() {
         let mock_uuid_1 = Uuid::new_v4();
 
-        let input = VariantArray::from_iter([Some(Variant::from(mock_uuid_1)), 
None]);
+        let input = VariantArray::from_iter([Some(mock_uuid_1), None]);
 
         // shred_variant only supports FixedSizeBinary(16). Any other length 
will err.
         let err = shred_variant(&input, 
&DataType::FixedSizeBinary(17)).unwrap_err();
@@ -1498,7 +1498,7 @@ mod tests {
 
     #[test]
     fn test_invalid_shredded_types_rejected() {
-        let input = VariantArray::from_iter([Variant::from(42)]);
+        let input = VariantArray::from_iter([Some(42)]);
 
         let invalid_types = vec![
             DataType::UInt8,
diff --git a/parquet-variant-compute/src/unshred_variant.rs 
b/parquet-variant-compute/src/unshred_variant.rs
index 40a22a3f54..cc414dadc3 100644
--- a/parquet-variant-compute/src/unshred_variant.rs
+++ b/parquet-variant-compute/src/unshred_variant.rs
@@ -857,9 +857,7 @@ mod tests {
 
     #[test]
     fn test_shred_unshred_round_trip_annotates_value_non_nullable() {
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::from(42i64));
-        let original = builder.build();
+        let original = VariantArray::from_iter([Some(42_i64)]);
         assert!(!value_field_is_nullable(&original));
 
         let shredded = shred_variant(&original, &DataType::Int64).unwrap();
@@ -892,10 +890,7 @@ mod tests {
 
     #[test]
     fn test_unshred_already_unshredded_reannotates_nullable_value() {
-        let mut builder = VariantArrayBuilder::new(2);
-        builder.append_variant(Variant::from(42i64));
-        builder.append_null();
-        let original = builder.build();
+        let original = VariantArray::from_iter([Some(42_i64), None]);
 
         // same data, but with the out-of-spec nullable `value` annotation
         let nullable_input = VariantArray::from_parts(
@@ -965,18 +960,14 @@ mod tests {
     /// shape has its own expansion of `handle_unshredded_case`.
     #[test]
     fn test_unshred_missing_row_for_decimal_timestamp_object_list() {
-        let mut builder = VariantArrayBuilder::new(2);
-        builder.append_variant(Variant::from(VariantDecimal8::try_new(1234, 
2).unwrap()));
-        builder.append_null();
-        assert_missing_row_unshreds_to_variant_null(&builder.build(), 
&DataType::Decimal64(18, 2));
+        let decimals =
+            VariantArray::from_iter([Some(VariantDecimal8::try_new(1234, 
2).unwrap()), None]);
+        assert_missing_row_unshreds_to_variant_null(&decimals, 
&DataType::Decimal64(18, 2));
 
-        let mut builder = VariantArrayBuilder::new(2);
-        builder.append_variant(Variant::from(
-            chrono::DateTime::from_timestamp(1, 0).unwrap(),
-        ));
-        builder.append_null();
+        let timestamps =
+            VariantArray::from_iter([Some(chrono::DateTime::from_timestamp(1, 
0).unwrap()), None]);
         assert_missing_row_unshreds_to_variant_null(
-            &builder.build(),
+            &timestamps,
             &DataType::Timestamp(TimeUnit::Microsecond, Some("UTC".into())),
         );
 
@@ -1010,9 +1001,7 @@ mod tests {
 
     #[test]
     fn test_unshred_value_only_with_unmasked_nulls_materializes_variant_null() 
{
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::from(42i64));
-        let single = builder.build();
+        let single = VariantArray::from_iter([Some(42_i64)]);
         let metadata_bytes = 
single.metadata_column().as_binary_view().value(0);
         let value_bytes = single.value_column().as_binary_view().value(0);
 
diff --git a/parquet-variant-compute/src/variant_array.rs 
b/parquet-variant-compute/src/variant_array.rs
index d1ac09a364..46cb2abb4f 100644
--- a/parquet-variant-compute/src/variant_array.rs
+++ b/parquet-variant-compute/src/variant_array.rs
@@ -1826,15 +1826,7 @@ mod test {
 
     #[test]
     fn test_variant_array_iter_double_ended() {
-        let mut b = VariantArrayBuilder::new(5);
-
-        b.append_variant(Variant::from(0_i32));
-        b.append_null();
-        b.append_variant(Variant::from(2_i32));
-        b.append_null();
-        b.append_variant(Variant::from(4_i32));
-
-        let array = b.build();
+        let array = VariantArray::from_iter([Some(0_i32), None, Some(2_i32), 
None, Some(4_i32)]);
         let mut iter = array.iter();
 
         assert_eq!(iter.next(), Some(Some(Variant::from(0_i32))));
@@ -1850,15 +1842,7 @@ mod test {
 
     #[test]
     fn test_variant_array_iter_reverse() {
-        let mut b = VariantArrayBuilder::new(5);
-
-        b.append_variant(Variant::from("a"));
-        b.append_null();
-        b.append_variant(Variant::from("aaa"));
-        b.append_null();
-        b.append_variant(Variant::from("aaaaa"));
-
-        let array = b.build();
+        let array = VariantArray::from_iter([Some("a"), None, Some("aaa"), 
None, Some("aaaaa")]);
 
         let result: Vec<_> = array.iter().rev().collect();
         assert_eq!(
diff --git a/parquet-variant-compute/src/variant_get.rs 
b/parquet-variant-compute/src/variant_get.rs
index 63af0dad08..96d634d516 100644
--- a/parquet-variant-compute/src/variant_get.rs
+++ b/parquet-variant-compute/src/variant_get.rs
@@ -3023,9 +3023,7 @@ mod test {
 
     #[test]
     fn test_error_message_boolean_type_display() {
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::from("abcd"));
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some("abcd")]));
 
         // Request Boolean with strict casting to force an error
         let options = GetOptions {
@@ -3044,9 +3042,7 @@ mod test {
 
     #[test]
     fn test_error_message_numeric_type_display() {
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::from("abcd"));
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some("abcd")]));
 
         // Request Float32 with strict casting to force an error
         let options = GetOptions {
@@ -3065,9 +3061,7 @@ mod test {
 
     #[test]
     fn test_error_message_temporal_type_display() {
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::BooleanFalse);
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some(false)]));
 
         // Request Timestamp with strict casting to force an error
         let options = GetOptions {
@@ -3939,15 +3933,15 @@ mod test {
 
     #[test]
     fn get_decimal32_scale_down_rounding() {
-        let mut builder = crate::VariantArrayBuilder::new(7);
-        builder.append_variant(VariantDecimal4::try_new(1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal4::try_new(1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal4::try_new(-1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal4::try_new(-1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal4::try_new(1235, 
2).unwrap().into()); // 12.35 rounded down to 10 for scale -1
-        builder.append_variant(VariantDecimal4::try_new(1235, 
3).unwrap().into()); // 1.235 rounded down to 0 for scale -1
-        builder.append_variant(VariantDecimal4::try_new(5235, 
3).unwrap().into()); // 5.235 rounded up to 10 for scale -1
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal4::try_new(1235, 0).unwrap()),
+            Some(VariantDecimal4::try_new(1245, 0).unwrap()),
+            Some(VariantDecimal4::try_new(-1235, 0).unwrap()),
+            Some(VariantDecimal4::try_new(-1245, 0).unwrap()),
+            Some(VariantDecimal4::try_new(1235, 2).unwrap()), // 12.35 rounded 
down to 10 for scale -1
+            Some(VariantDecimal4::try_new(1235, 3).unwrap()), // 1.235 rounded 
down to 0 for scale -1
+            Some(VariantDecimal4::try_new(5235, 3).unwrap()), // 5.235 rounded 
up to 10 for scale -1
+        ]));
 
         let field = Field::new("result", DataType::Decimal32(9, -1), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -3968,18 +3962,10 @@ mod test {
 
     #[test]
     fn get_decimal32_large_scale_reduction() {
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal4::try_new(-VariantDecimal4::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            
Some(VariantDecimal4::try_new(-VariantDecimal4::MAX_UNSCALED_VALUE, 
0).unwrap()),
+            Some(VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 
0).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal32(9, -9), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4007,18 +3993,11 @@ mod test {
     #[test]
     fn get_decimal32_precision_overflow_safe() {
         // Exceed Decimal32 after scaling and rounding
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 9)
-                .unwrap()
-                .into(),
-        ); // integer value round up overflows
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 
0).unwrap()),
+            // integer value round up overflows
+            Some(VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 
9).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal32(2, 2), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4031,13 +4010,9 @@ mod test {
 
     #[test]
     fn get_decimal32_precision_overflow_unsafe_errors() {
-        let mut builder = crate::VariantArrayBuilder::new(1);
-        builder.append_variant(
-            VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some(
+            VariantDecimal4::try_new(VariantDecimal4::MAX_UNSCALED_VALUE, 
0).unwrap(),
+        )]));
 
         let field = Field::new("result", DataType::Decimal32(9, 2), true);
         let cast_options = CastOptions {
@@ -4089,15 +4064,15 @@ mod test {
 
     #[test]
     fn get_decimal64_scale_down_rounding() {
-        let mut builder = crate::VariantArrayBuilder::new(7);
-        builder.append_variant(VariantDecimal8::try_new(1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal8::try_new(1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal8::try_new(-1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal8::try_new(-1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal8::try_new(1235, 
2).unwrap().into()); // 12.35 rounded down to 10 for scale -1
-        builder.append_variant(VariantDecimal8::try_new(1235, 
3).unwrap().into()); // 1.235 rounded down to 0 for scale -1
-        builder.append_variant(VariantDecimal8::try_new(5235, 
3).unwrap().into()); // 5.235 rounded up to 10 for scale -1
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal8::try_new(1235, 0).unwrap()),
+            Some(VariantDecimal8::try_new(1245, 0).unwrap()),
+            Some(VariantDecimal8::try_new(-1235, 0).unwrap()),
+            Some(VariantDecimal8::try_new(-1245, 0).unwrap()),
+            Some(VariantDecimal8::try_new(1235, 2).unwrap()), // 12.35 rounded 
down to 10 for scale -1
+            Some(VariantDecimal8::try_new(1235, 3).unwrap()), // 1.235 rounded 
down to 0 for scale -1
+            Some(VariantDecimal8::try_new(5235, 3).unwrap()), // 5.235 rounded 
up to 10 for scale -1
+        ]));
 
         let field = Field::new("result", DataType::Decimal64(18, -1), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4118,18 +4093,10 @@ mod test {
 
     #[test]
     fn get_decimal64_large_scale_reduction() {
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal8::try_new(-VariantDecimal8::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            
Some(VariantDecimal8::try_new(-VariantDecimal8::MAX_UNSCALED_VALUE, 
0).unwrap()),
+            Some(VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 
0).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal64(18, -18), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4157,18 +4124,11 @@ mod test {
     #[test]
     fn get_decimal64_precision_overflow_safe() {
         // Exceed Decimal64 after scaling and rounding
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 18)
-                .unwrap()
-                .into(),
-        ); // integer value round up overflows
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 
0).unwrap()),
+            // integer value round up overflows
+            Some(VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 
18).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal64(2, 2), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4181,13 +4141,9 @@ mod test {
 
     #[test]
     fn get_decimal64_precision_overflow_unsafe_errors() {
-        let mut builder = crate::VariantArrayBuilder::new(1);
-        builder.append_variant(
-            VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some(
+            VariantDecimal8::try_new(VariantDecimal8::MAX_UNSCALED_VALUE, 
0).unwrap(),
+        )]));
 
         let field = Field::new("result", DataType::Decimal64(18, 2), true);
         let cast_options = CastOptions {
@@ -4208,12 +4164,12 @@ mod test {
 
     #[test]
     fn get_decimal128_rescaled_to_scale2() {
-        let mut builder = crate::VariantArrayBuilder::new(4);
-        builder.append_variant(VariantDecimal16::try_new(1234, 
2).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1234, 
3).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1234, 
0).unwrap().into());
-        builder.append_null();
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal16::try_new(1234, 2).unwrap()),
+            Some(VariantDecimal16::try_new(1234, 3).unwrap()),
+            Some(VariantDecimal16::try_new(1234, 0).unwrap()),
+            None,
+        ]));
 
         let field = Field::new("result", DataType::Decimal128(38, 2), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4230,15 +4186,15 @@ mod test {
 
     #[test]
     fn get_decimal128_scale_down_rounding() {
-        let mut builder = crate::VariantArrayBuilder::new(7);
-        builder.append_variant(VariantDecimal16::try_new(1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(-1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(-1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1235, 
2).unwrap().into()); // 12.35 rounded down to 10 for scale -1
-        builder.append_variant(VariantDecimal16::try_new(1235, 
3).unwrap().into()); // 1.235 rounded down to 0 for scale -1
-        builder.append_variant(VariantDecimal16::try_new(5235, 
3).unwrap().into()); // 5.235 rounded up to 10 for scale -1
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal16::try_new(1235, 0).unwrap()),
+            Some(VariantDecimal16::try_new(1245, 0).unwrap()),
+            Some(VariantDecimal16::try_new(-1235, 0).unwrap()),
+            Some(VariantDecimal16::try_new(-1245, 0).unwrap()),
+            Some(VariantDecimal16::try_new(1235, 2).unwrap()), // 12.35 
rounded down to 10 for scale -1
+            Some(VariantDecimal16::try_new(1235, 3).unwrap()), // 1.235 
rounded down to 0 for scale -1
+            Some(VariantDecimal16::try_new(5235, 3).unwrap()), // 5.235 
rounded up to 10 for scale -1
+        ]));
 
         let field = Field::new("result", DataType::Decimal128(38, -1), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4260,18 +4216,11 @@ mod test {
     #[test]
     fn get_decimal128_precision_overflow_safe() {
         // Exceed Decimal128 after scaling and rounding
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 38)
-                .unwrap()
-                .into(),
-        ); // integer value round up overflows
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
0).unwrap()),
+            // integer value round up overflows
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
38).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal128(2, 2), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4284,13 +4233,9 @@ mod test {
 
     #[test]
     fn get_decimal128_precision_overflow_unsafe_errors() {
-        let mut builder = crate::VariantArrayBuilder::new(1);
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter([Some(
+            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
0).unwrap(),
+        )]));
 
         let field = Field::new("result", DataType::Decimal128(38, 2), true);
         let cast_options = CastOptions {
@@ -4310,12 +4255,12 @@ mod test {
     #[test]
     fn get_decimal256_rescaled_to_scale2() {
         // Build unshredded variant values with different scales using 
Decimal16 source
-        let mut builder = crate::VariantArrayBuilder::new(4);
-        builder.append_variant(VariantDecimal16::try_new(1234, 
2).unwrap().into()); // 12.34
-        builder.append_variant(VariantDecimal16::try_new(1234, 
3).unwrap().into()); // 1.234
-        builder.append_variant(VariantDecimal16::try_new(1234, 
0).unwrap().into()); // 1234
-        builder.append_null();
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal16::try_new(1234, 2).unwrap()), // 12.34
+            Some(VariantDecimal16::try_new(1234, 3).unwrap()), // 1.234
+            Some(VariantDecimal16::try_new(1234, 0).unwrap()), // 1234
+            None,
+        ]));
 
         let field = Field::new("result", DataType::Decimal256(76, 2), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4332,15 +4277,15 @@ mod test {
 
     #[test]
     fn get_decimal256_scale_down_rounding() {
-        let mut builder = crate::VariantArrayBuilder::new(7);
-        builder.append_variant(VariantDecimal16::try_new(1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(-1235, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(-1245, 
0).unwrap().into());
-        builder.append_variant(VariantDecimal16::try_new(1235, 
2).unwrap().into()); // 12.35 rounded down to 10 for scale -1
-        builder.append_variant(VariantDecimal16::try_new(1235, 
3).unwrap().into()); // 1.235 rounded down to 0 for scale -1
-        builder.append_variant(VariantDecimal16::try_new(5235, 
3).unwrap().into()); // 5.235 rounded up to 10 for scale -1
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some(VariantDecimal16::try_new(1235, 0).unwrap()),
+            Some(VariantDecimal16::try_new(1245, 0).unwrap()),
+            Some(VariantDecimal16::try_new(-1235, 0).unwrap()),
+            Some(VariantDecimal16::try_new(-1245, 0).unwrap()),
+            Some(VariantDecimal16::try_new(1235, 2).unwrap()), // 12.35 
rounded down to 10 for scale -1
+            Some(VariantDecimal16::try_new(1235, 3).unwrap()), // 1.235 
rounded down to 0 for scale -1
+            Some(VariantDecimal16::try_new(5235, 3).unwrap()), // 5.235 
rounded up to 10 for scale -1
+        ]));
 
         let field = Field::new("result", DataType::Decimal256(76, -1), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4362,18 +4307,10 @@ mod test {
     #[test]
     fn get_decimal256_precision_overflow_safe() {
         // Exceed Decimal128 max precision (38) after scaling
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 1)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
1).unwrap()),
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
0).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal256(76, 39), true);
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(field)));
@@ -4394,18 +4331,10 @@ mod test {
     #[test]
     fn get_decimal256_precision_overflow_unsafe_errors() {
         // Exceed Decimal128 max precision (38) after scaling
-        let mut builder = crate::VariantArrayBuilder::new(2);
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 1)
-                .unwrap()
-                .into(),
-        );
-        builder.append_variant(
-            VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 0)
-                .unwrap()
-                .into(),
-        );
-        let variant_array: ArrayRef = ArrayRef::from(builder.build());
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
1).unwrap()),
+            
Some(VariantDecimal16::try_new(VariantDecimal16::MAX_UNSCALED_VALUE, 
0).unwrap()),
+        ]));
 
         let field = Field::new("result", DataType::Decimal256(76, 39), true);
         let cast_options = CastOptions {
@@ -4452,11 +4381,11 @@ mod test {
 
     #[test]
     fn get_variant_as_dictionary() {
-        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter(vec![
-            Some(Variant::from("apple")),
-            Some(Variant::from("banana")),
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some("apple"),
+            Some("banana"),
             None,
-            Some(Variant::from("apple")),
+            Some("apple"),
         ]));
         let data_type = DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(DataType::Utf8));
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(Field::new(
@@ -4475,12 +4404,8 @@ mod test {
 
     #[test]
     fn get_variant_as_numeric_dictionary() {
-        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter(vec![
-            Some(Variant::from(42)),
-            Some(Variant::from(7)),
-            None,
-            Some(Variant::from(42)),
-        ]));
+        let variant_array: ArrayRef =
+            ArrayRef::from(VariantArray::from_iter([Some(42), Some(7), None, 
Some(42)]));
         let data_type = DataType::Dictionary(Box::new(DataType::Int16), 
Box::new(DataType::Int32));
         let options = 
GetOptions::new().with_as_type(Some(FieldRef::from(Field::new(
             "dict",
@@ -4498,12 +4423,12 @@ mod test {
 
     #[test]
     fn get_variant_as_run_end_encoded() {
-        let variant_array: ArrayRef = 
ArrayRef::from(VariantArray::from_iter(vec![
-            Some(Variant::from("apple")),
-            Some(Variant::from("apple")),
+        let variant_array: ArrayRef = ArrayRef::from(VariantArray::from_iter([
+            Some("apple"),
+            Some("apple"),
             None,
-            Some(Variant::from("banana")),
-            Some(Variant::from("banana")),
+            Some("banana"),
+            Some("banana"),
         ]));
         let run_ends = Arc::new(Field::new(
             Field::REE_RUN_ENDS_FIELD_DEFAULT_NAME,
@@ -4695,12 +4620,8 @@ mod test {
     }
 
     fn invalid_time_variant_array() -> ArrayRef {
-        let mut builder = VariantArrayBuilder::new(3);
         // 86401000000 is invalid for Time64Microsecond (max is 86400000000)
-        builder.append_variant(Variant::Int64(86401000000));
-        builder.append_variant(Variant::Int64(86401000000));
-        builder.append_variant(Variant::Int64(86401000000));
-        Arc::new(builder.build().into_inner())
+        ArrayRef::from(VariantArray::from_iter([Some(86401000000_i64); 3]))
     }
 
     #[test]
@@ -5459,10 +5380,7 @@ mod test {
                 vec![Field::new("encoded", data_type.clone(), true)],
             )
             .unwrap();
-            let mut builder = VariantArrayBuilder::new(2);
-            builder.append_variant(Variant::from("apple"));
-            builder.append_variant(Variant::from("banana"));
-            let array = ArrayRef::from(builder.build());
+            let array = ArrayRef::from(VariantArray::from_iter([Some("apple"), 
Some("banana")]));
             let options =
                 union_get_options(&fields, 
UnionMode::Dense).with_cast_options(CastOptions {
                     safe: false,
@@ -5524,9 +5442,9 @@ mod test {
             ],
         )
         .unwrap();
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(VariantDecimal4::try_new(12_345, 
2).unwrap().into());
-        let array = ArrayRef::from(builder.build());
+        let array = ArrayRef::from(VariantArray::from_iter([Some(
+            VariantDecimal4::try_new(12_345, 2).unwrap(),
+        )]));
 
         for safe in [true, false] {
             let options =
@@ -5725,9 +5643,7 @@ mod test {
 
     #[test]
     fn get_variant_as_union_empty_fields_errors() {
-        let mut builder = VariantArrayBuilder::new(1);
-        builder.append_variant(Variant::Int8(1));
-        let array = ArrayRef::from(builder.build());
+        let array = ArrayRef::from(VariantArray::from_iter([Some(1_i8)]));
 
         let err = variant_get(
             &array,

Reply via email to