Skip to content

Commit a7574ea

Browse files
committed
add more tests for bitpos
1 parent 18c5c95 commit a7574ea

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

test/Garnet.test/GarnetBitmapTests.cs

+36
Original file line numberDiff line numberDiff line change
@@ -2450,5 +2450,41 @@ public void BitmapBitPosBitInvalidMaskTests()
24502450
pos = db.StringBitPosition(key, bit: true, start: 7, end: 14, StringIndexType.Bit);
24512451
ClassicAssert.AreEqual(14, pos);
24522452
}
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+
}
24532489
}
24542490
}

0 commit comments

Comments
 (0)