This is an automated email from the ASF dual-hosted git repository.

dcapwell pushed a commit to branch CASSANDRA-20883_v2
in repository https://gitbox.apache.org/repos/asf/cassandra-accord.git

commit cef3cb40552f01887d4bdc739c78acca4171c2a4
Author: David Capwell <[email protected]>
AuthorDate: Mon Sep 8 13:19:07 2025 -0700

    CASSANDRA-20883: fixed a bug with the bit set when querying outside of the 
size
---
 .../src/main/java/accord/utils/LargeBitSet.java    |  2 +-
 .../src/main/java/accord/utils/SmallBitSet.java    |  2 ++
 .../test/java/accord/utils/SimpleBitSetTest.java   | 26 +++++++++++++++++-----
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/accord-core/src/main/java/accord/utils/LargeBitSet.java 
b/accord-core/src/main/java/accord/utils/LargeBitSet.java
index fbeae5bf..73309a05 100644
--- a/accord-core/src/main/java/accord/utils/LargeBitSet.java
+++ b/accord-core/src/main/java/accord/utils/LargeBitSet.java
@@ -320,7 +320,7 @@ public class LargeBitSet implements SimpleBitSet
     private int nextSetBitInternal(int i, int exclIndexBound, int ifNotFound)
     {
         Invariants.requireArgument(i >= 0);
-        Invariants.requireArgument(i <= size());
+        if (i >= size()) return -1;
 
         if (count == 0)
             return ifNotFound;
diff --git a/accord-core/src/main/java/accord/utils/SmallBitSet.java 
b/accord-core/src/main/java/accord/utils/SmallBitSet.java
index a0e692f9..6efc39de 100644
--- a/accord-core/src/main/java/accord/utils/SmallBitSet.java
+++ b/accord-core/src/main/java/accord/utils/SmallBitSet.java
@@ -77,6 +77,8 @@ public class SmallBitSet implements SimpleBitSet
     @Override
     public int nextSetBit(int fromIndex)
     {
+        if (fromIndex >= 64)
+            return -1;
         long bits = this.bits & bitsEqualOrGreater(fromIndex);
         if (bits == 0)
             return -1;
diff --git a/accord-core/src/test/java/accord/utils/SimpleBitSetTest.java 
b/accord-core/src/test/java/accord/utils/SimpleBitSetTest.java
index 6c750eaa..69eb5c58 100644
--- a/accord-core/src/test/java/accord/utils/SimpleBitSetTest.java
+++ b/accord-core/src/test/java/accord/utils/SimpleBitSetTest.java
@@ -64,6 +64,12 @@ class SimpleBitSetTest
         return new Property.SimpleCommand<>("NextSetBit(" + idx + ')', s2 -> 
s2.nextSetBit(idx));
     }
 
+    private static Property.Command<State, Void, ?> 
nextSetBitOutOfRange(RandomSource rs, State state)
+    {
+        int idx = rs.nextInt(state.size, Integer.MAX_VALUE);
+        return new Property.SimpleCommand<>("NextSetBitOutOfRange(" + idx + 
')', s2 -> s2.nextSetBit(idx));
+    }
+
     @Test
     public void test()
     {
@@ -74,6 +80,7 @@ class SimpleBitSetTest
                                             .add(SimpleBitSetTest::clear)
                                             .add(SimpleBitSetTest::isEmpty)
                                             .add(SimpleBitSetTest::nextSetBit)
+                                            
.add(SimpleBitSetTest::nextSetBitOutOfRange)
                                             .build());
     }
 
@@ -145,13 +152,20 @@ class SimpleBitSetTest
         public int nextSetBit(int fromIndex)
         {
             int expected;
-            for (expected = fromIndex; expected < size; expected++)
+            if (fromIndex >= size)
             {
-                if (model.get(expected))
-                    break;
-            }
-            if (expected == size)
                 expected = -1;
+            }
+            else
+            {
+                for (expected = fromIndex; expected < size; expected++)
+                {
+                    if (model.get(expected))
+                        break;
+                }
+                if (expected == size)
+                    expected = -1;
+            }
             int actual = sut.nextSetBit(fromIndex);
 
             Assertions.assertThat(actual).isEqualTo(expected);
@@ -167,7 +181,7 @@ class SimpleBitSetTest
         @Override
         public String toString()
         {
-            return sut.getClass().getSimpleName();
+            return sut.getClass().getSimpleName() + ", size=" + size;
         }
     }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to