@@ -68,6 +68,31 @@ fn vortex_to_arrow_variant(arr: &ArrayRef) -> ArrowVariantArray {
6868 pv. to_arrow ( & mut ctx) . unwrap ( )
6969}
7070
71+ fn assert_variant_storage_matches ( expected : & ArrowVariantArray , actual : & ArrowVariantArray ) {
72+ assert_eq ! ( actual. len( ) , expected. len( ) , "length mismatch" ) ;
73+ assert_eq ! (
74+ actual. inner( ) . column_names( ) ,
75+ expected. inner( ) . column_names( ) ,
76+ "column mismatch"
77+ ) ;
78+ assert_eq ! ( actual. inner( ) . nulls( ) , expected. inner( ) . nulls( ) ) ;
79+ assert_eq ! (
80+ actual. inner( ) . fields( ) . len( ) ,
81+ expected. inner( ) . fields( ) . len( )
82+ ) ;
83+
84+ for ( expected, actual) in expected
85+ . inner ( )
86+ . fields ( )
87+ . iter ( )
88+ . zip ( actual. inner ( ) . fields ( ) . iter ( ) )
89+ {
90+ assert_eq ! ( actual. name( ) , expected. name( ) ) ;
91+ assert_eq ! ( actual. data_type( ) , expected. data_type( ) ) ;
92+ assert_eq ! ( actual. is_nullable( ) , expected. is_nullable( ) ) ;
93+ }
94+ }
95+
7196/// Run variant_get through both Arrow and Vortex on the same input, and assert
7297/// the per-row results (value + validity) are identical by comparing at the Arrow level.
7398fn assert_matches_arrow ( json_rows : & [ & str ] , field : & str ) {
@@ -89,11 +114,7 @@ fn assert_matches_arrow(json_rows: &[&str], field: &str) {
89114 let vortex_result = apply_variant_get ! ( & vortex_input, field) . unwrap ( ) ;
90115 let vortex_as_arrow = vortex_to_arrow_variant ( & vortex_result) ;
91116
92- assert_eq ! (
93- vortex_as_arrow. len( ) ,
94- arrow_result_variant. len( ) ,
95- "length mismatch"
96- ) ;
117+ assert_variant_storage_matches ( & arrow_result_variant, & vortex_as_arrow) ;
97118
98119 for i in 0 ..arrow_result_variant. len ( ) {
99120 let arrow_is_null = arrow_result_variant. is_null ( i) ;
@@ -139,11 +160,7 @@ fn assert_matches_arrow_with_path(
139160 let vortex_result = apply_variant_get ! ( & vortex_input, path) . unwrap ( ) ;
140161 let vortex_as_arrow = vortex_to_arrow_variant ( & vortex_result) ;
141162
142- assert_eq ! (
143- vortex_as_arrow. len( ) ,
144- arrow_result_variant. len( ) ,
145- "length mismatch"
146- ) ;
163+ assert_variant_storage_matches ( & arrow_result_variant, & vortex_as_arrow) ;
147164
148165 for i in 0 ..arrow_result_variant. len ( ) {
149166 let arrow_is_null = arrow_result_variant. is_null ( i) ;
@@ -226,11 +243,7 @@ fn assert_matches_arrow_nullable(json_rows: &[&str], validity: &[bool], field: &
226243 let vortex_result = apply_variant_get ! ( & vortex_input, field) . unwrap ( ) ;
227244 let vortex_as_arrow = vortex_to_arrow_variant ( & vortex_result) ;
228245
229- assert_eq ! (
230- vortex_as_arrow. len( ) ,
231- arrow_result_variant. len( ) ,
232- "length mismatch"
233- ) ;
246+ assert_variant_storage_matches ( & arrow_result_variant, & vortex_as_arrow) ;
234247
235248 for i in 0 ..arrow_result_variant. len ( ) {
236249 let arrow_is_null = arrow_result_variant. is_null ( i) ;
0 commit comments