@@ -2450,5 +2450,41 @@ public void BitmapBitPosBitInvalidMaskTests()
2450
2450
pos = db . StringBitPosition ( key , bit : true , start : 7 , end : 14 , StringIndexType . Bit ) ;
2451
2451
ClassicAssert . AreEqual ( 14 , pos ) ;
2452
2452
}
2453
+
2454
+ [ Test , Order ( 39 ) ]
2455
+ [ Category ( "BITPOS" ) ]
2456
+ public void BitmapBitPosBitSearchSingleBitRangeTests ( )
2457
+ {
2458
+ using var redis = ConnectionMultiplexer . Connect ( TestUtils . GetConfig ( ) ) ;
2459
+ var db = redis . GetDatabase ( 0 ) ;
2460
+
2461
+ var key = "mykey" ;
2462
+ var valueLen = 1 << 12 ;
2463
+ var value = new byte [ valueLen ] ;
2464
+ for ( var i = 0 ; i < valueLen ; i ++ )
2465
+ value [ i ] = 0xAA ;
2466
+
2467
+ _ = db . StringSet ( key , value ) ;
2468
+
2469
+ var iter = 1 << 12 ;
2470
+ var valueLenBits = valueLen << 3 ;
2471
+ for ( var i = 0 ; i < iter ; i ++ )
2472
+ {
2473
+ var offset = r . NextInt64 ( 0 , valueLenBits ) ;
2474
+ BitSearch ( offset , searchFor : true ) ;
2475
+ BitSearch ( offset , searchFor : false ) ;
2476
+ }
2477
+
2478
+ void BitSearch ( long offset , bool searchFor )
2479
+ {
2480
+ var pos = db . StringBitPosition ( key , bit : searchFor , start : offset , end : offset , StringIndexType . Bit ) ;
2481
+ var equalsSearchFor = ( offset & 0x1 ) == ( searchFor ? 0 : 1 ) ;
2482
+
2483
+ if ( equalsSearchFor )
2484
+ ClassicAssert . AreEqual ( offset , pos ) ;
2485
+ else
2486
+ ClassicAssert . AreEqual ( - 1 , pos ) ;
2487
+ }
2488
+ }
2453
2489
}
2454
2490
}
0 commit comments