@@ -257,7 +257,7 @@ private void CompareBinaryArrays<T>(BinaryArray actualArray)
257257 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
258258 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
259259
260- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
260+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
261261
262262 if ( _strictCompare )
263263 {
@@ -294,7 +294,7 @@ private void CompareVariadicArrays<T>(BinaryViewArray actualArray)
294294 Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
295295 }
296296
297- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
297+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
298298
299299 Assert . True ( expectedArray . Views . SequenceEqual ( actualArray . Views ) ) ;
300300
@@ -318,7 +318,7 @@ private void CompareArrays(FixedSizeBinaryArray actualArray)
318318 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
319319 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
320320
321- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
321+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
322322
323323 if ( _strictCompare )
324324 {
@@ -347,7 +347,7 @@ private void CompareArrays<T>(PrimitiveArray<T> actualArray)
347347 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
348348 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
349349
350- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
350+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
351351
352352 if ( _strictCompare )
353353 {
@@ -379,7 +379,7 @@ private void CompareArrays(BooleanArray actualArray)
379379 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
380380 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
381381
382- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
382+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
383383
384384 if ( _strictCompare )
385385 {
@@ -406,7 +406,7 @@ private void CompareArrays(ListArray actualArray)
406406 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
407407 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
408408
409- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
409+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
410410
411411 if ( _strictCompare )
412412 {
@@ -442,7 +442,7 @@ private void CompareArrays(ListViewArray actualArray)
442442 Assert . Equal ( expectedArray . Length , actualArray . Length ) ;
443443 Assert . Equal ( expectedArray . NullCount , actualArray . NullCount ) ;
444444
445- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
445+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
446446
447447 if ( _strictCompare )
448448 {
@@ -475,15 +475,15 @@ private void CompareArrays(FixedSizeListArray actualArray)
475475 Assert . Equal ( expectedArray . Offset , actualArray . Offset ) ;
476476 }
477477
478- CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer ) ;
478+ CompareValidityBuffer ( expectedArray . NullCount , _expectedArray . Length , expectedArray . NullBitmapBuffer , expectedArray . Offset , actualArray . NullBitmapBuffer , actualArray . Offset ) ;
479479
480480 var listSize = ( ( FixedSizeListType ) expectedArray . Data . DataType ) . ListSize ;
481481 var expectedValuesSlice = ArrowArrayFactory . Slice (
482482 expectedArray . Values , expectedArray . Offset * listSize , expectedArray . Length * listSize ) ;
483483 actualArray . Values . Accept ( new ArrayComparer ( expectedValuesSlice , _strictCompare ) ) ;
484484 }
485485
486- private void CompareValidityBuffer ( int nullCount , int arrayLength , ArrowBuffer expectedValidityBuffer , int expectedBufferOffset , ArrowBuffer actualValidityBuffer )
486+ private void CompareValidityBuffer ( int nullCount , int arrayLength , ArrowBuffer expectedValidityBuffer , int expectedBufferOffset , ArrowBuffer actualValidityBuffer , int actualBufferOffset )
487487 {
488488 if ( _strictCompare )
489489 {
@@ -493,7 +493,7 @@ private void CompareValidityBuffer(int nullCount, int arrayLength, ArrowBuffer e
493493 {
494494 Assert . True ( nullCount == 0 || arrayLength == 0 ) ;
495495 }
496- else if ( expectedBufferOffset % 8 == 0 )
496+ else if ( expectedBufferOffset % 8 == 0 && expectedBufferOffset == actualBufferOffset )
497497 {
498498 int validityBitmapByteCount = BitUtility . ByteCount ( arrayLength ) ;
499499 int byteOffset = BitUtility . ByteCount ( expectedBufferOffset ) ;
@@ -524,7 +524,7 @@ private void CompareValidityBuffer(int nullCount, int arrayLength, ArrowBuffer e
524524 for ( int i = 0 ; i < arrayLength ; i ++ )
525525 {
526526 Assert . True (
527- BitUtility . GetBit ( expectedSpan , expectedBufferOffset + i ) == BitUtility . GetBit ( actualSpan , i ) ,
527+ BitUtility . GetBit ( expectedSpan , expectedBufferOffset + i ) == BitUtility . GetBit ( actualSpan , actualBufferOffset + i ) ,
528528 string . Format ( "Bit at index {0}/{1} is not equal" , i , arrayLength ) ) ;
529529 }
530530 }
0 commit comments