@@ -160,10 +160,14 @@ public void Visit(StructArray array)
160160
161161 Assert . Equal ( expectedArray . Length , array . Length ) ;
162162 Assert . Equal ( expectedArray . NullCount , array . NullCount ) ;
163- Assert . Equal ( 0 , array . Offset ) ;
164163 Assert . Equal ( expectedArray . Data . Children . Length , array . Data . Children . Length ) ;
165164 Assert . Equal ( expectedArray . Fields . Count , array . Fields . Count ) ;
166165
166+ if ( _strictCompare )
167+ {
168+ Assert . Equal ( expectedArray . Offset , array . Offset ) ;
169+ }
170+
167171 for ( int i = 0 ; i < array . Fields . Count ; i ++ )
168172 {
169173 array . Fields [ i ] . Accept ( new ArrayComparer ( expectedArray . Fields [ i ] , _strictCompare ) ) ;
@@ -178,12 +182,12 @@ public void Visit(UnionArray array)
178182 Assert . Equal ( expectedArray . Mode , array . Mode ) ;
179183 Assert . Equal ( expectedArray . Length , array . Length ) ;
180184 Assert . Equal ( expectedArray . NullCount , array . NullCount ) ;
181- Assert . Equal ( 0 , array . Offset ) ;
182185 Assert . Equal ( expectedArray . Data . Children . Length , array . Data . Children . Length ) ;
183186 Assert . Equal ( expectedArray . Fields . Count , array . Fields . Count ) ;
184187
185188 if ( _strictCompare )
186189 {
190+ Assert . Equal ( expectedArray . Offset , array . Offset ) ;
187191 Assert . True ( expectedArray . TypeBuffer . Span . SequenceEqual ( array . TypeBuffer . Span ) ) ;
188192 }
189193 else
@@ -252,12 +256,12 @@ private void CompareBinaryArrays<T>(BinaryArray actualArray)
252256
253257 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
254258 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
255- Assert . Equal ( 0 , actualArray . Offset ) ;
256259
257260 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
258261
259262 if ( _strictCompare )
260263 {
264+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
261265 Assert . True ( expectedArray . ValueOffsetsBuffer . Span . SequenceEqual ( actualArray . ValueOffsetsBuffer . Span ) ) ;
262266 Assert . True ( expectedArray . Values . Slice ( 0 , expectedArray . Length ) . SequenceEqual ( actualArray . Values . Slice ( 0 , actualArray . Length ) ) ) ;
263267 }
@@ -284,7 +288,11 @@ private void CompareVariadicArrays<T>(BinaryViewArray actualArray)
284288
285289 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
286290 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
287- Assert . Equal ( 0 , actualArray . Offset ) ;
291+
292+ if ( _strictCompare )
293+ {
294+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
295+ }
288296
289297 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
290298
@@ -309,12 +317,12 @@ private void CompareArrays(FixedSizeBinaryArray actualArray)
309317
310318 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
311319 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
312- Assert . Equal ( 0 , actualArray . Offset ) ;
313320
314321 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
315322
316323 if ( _strictCompare )
317324 {
325+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
318326 Assert . True ( expectedArray . ValueBuffer . Span . Slice ( 0 , expectedArray . Length ) . SequenceEqual ( actualArray . ValueBuffer . Span . Slice ( 0 , actualArray . Length ) ) ) ;
319327 }
320328 else
@@ -338,12 +346,12 @@ private void CompareArrays<T>(PrimitiveArray<T> actualArray)
338346
339347 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
340348 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
341- Assert . Equal ( 0 , actualArray . Offset ) ;
342349
343350 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
344351
345352 if ( _strictCompare )
346353 {
354+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
347355 Assert . True ( expectedArray . Values . Slice ( 0 , expectedArray . Length ) . SequenceEqual ( actualArray . Values . Slice ( 0 , actualArray . Length ) ) ) ;
348356 }
349357 else
@@ -370,12 +378,12 @@ private void CompareArrays(BooleanArray actualArray)
370378
371379 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
372380 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
373- Assert . Equal ( 0 , actualArray . Offset ) ;
374381
375382 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
376383
377384 if ( _strictCompare )
378385 {
386+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
379387 int booleanByteCount = BitUtility . ByteCount ( expectedArray . Length ) ;
380388 Assert . True ( expectedArray . Values . Slice ( 0 , booleanByteCount ) . SequenceEqual ( actualArray . Values . Slice ( 0 , booleanByteCount ) ) ) ;
381389 }
@@ -397,22 +405,31 @@ private void CompareArrays(ListArray actualArray)
397405
398406 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
399407 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
400- Assert . Equal ( 0 , actualArray . Offset ) ;
401408
402409 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
403410
404411 if ( _strictCompare )
405412 {
413+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
406414 Assert . True ( expectedArray . ValueOffsetsBuffer . Span . SequenceEqual ( actualArray . ValueOffsetsBuffer . Span ) ) ;
415+ actualArray . Values . Accept ( new ArrayComparer ( expectedArray . Values , _strictCompare ) ) ;
407416 }
408417 else
409418 {
410- int offsetsStart = ( expectedArray . Offset ) * sizeof ( int ) ;
411- int offsetsLength = ( expectedArray . Length + 1 ) * sizeof ( int ) ;
412- Assert . True ( expectedArray . ValueOffsetsBuffer . Span . Slice ( offsetsStart , offsetsLength ) . SequenceEqual ( actualArray . ValueOffsetsBuffer . Span . Slice ( 0 , offsetsLength ) ) ) ;
419+ for ( int i = 0 ; i < actualArray . Length ; ++ i )
420+ {
421+ if ( expectedArray . IsNull ( i ) )
422+ {
423+ Assert . True ( actualArray . IsNull ( i ) ) ;
424+ }
425+ else
426+ {
427+ var expectedList = expectedArray . GetSlicedValues ( i ) ;
428+ var actualList = actualArray . GetSlicedValues ( i ) ;
429+ actualList . Accept ( new ArrayComparer ( expectedList , _strictCompare ) ) ;
430+ }
431+ }
413432 }
414-
415- actualArray . Values . Accept ( new ArrayComparer ( expectedArray . Values , _strictCompare ) ) ;
416433 }
417434
418435 private void CompareArrays ( ListViewArray actualArray )
@@ -424,12 +441,12 @@ private void CompareArrays(ListViewArray actualArray)
424441
425442 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
426443 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
427- Assert . Equal ( 0 , actualArray . Offset ) ;
428444
429445 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
430446
431447 if ( _strictCompare )
432448 {
449+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
433450 Assert . True ( expectedArray . ValueOffsetsBuffer . Span . SequenceEqual ( actualArray . ValueOffsetsBuffer . Span ) ) ;
434451 Assert . True ( expectedArray . SizesBuffer . Span . SequenceEqual ( actualArray . SizesBuffer . Span ) ) ;
435452 }
@@ -453,7 +470,10 @@ private void CompareArrays(FixedSizeListArray actualArray)
453470
454471 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
455472 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
456- Assert . Equal ( 0 , actualArray . Offset ) ;
473+ if ( _strictCompare )
474+ {
475+ Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
476+ }
457477
458478 CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
459479
0 commit comments