diff --git a/classpath/java/util/BitSet.java b/classpath/java/util/BitSet.java index 8f2033f4cc..685f8f6520 100644 --- a/classpath/java/util/BitSet.java +++ b/classpath/java/util/BitSet.java @@ -182,4 +182,12 @@ public class BitSet implements Serializable, Cloneable { return nextBit(fromIndex, true); } + public int cardinality() { + int numSetBits = 0; + for (int i = nextSetBit(0); i >= 0; i = nextSetBit(i+1)) { + ++numSetBits; + } + + return numSetBits; + } } diff --git a/test/BitsetTest.java b/test/BitsetTest.java index 5f4793e205..70de6e3688 100644 --- a/test/BitsetTest.java +++ b/test/BitsetTest.java @@ -14,16 +14,19 @@ public class BitsetTest { assertTrue("bit 5 is set", bits.get(5)); assertTrue("bit 0 is not set", !bits.get(0)); assertTrue("bit 16 is not set", !bits.get(16)); + assertCardinality(bits, 2); bits.and(other); assertTrue("bit 5 is set", bits.get(5)); assertTrue("bit 1 is not set", !bits.get(1)); + assertCardinality(bits, 1); bits.set(100); assertTrue("bit 100 is set", bits.get(100)); assertTrue("bit 101 is not set", !bits.get(101)); + assertCardinality(bits, 2); other.set(101); @@ -38,6 +41,7 @@ public class BitsetTest { assertEquals("second bit is 100 from 100", 100, bits.nextSetBit(100)); assertEquals("third bit is 101", 101, bits.nextSetBit(101)); assertEquals("there is no 4th bit", -1, bits.nextSetBit(102)); + assertCardinality(bits, 3); assertEquals("first empty bit is 0", 0, bits.nextClearBit(0)); assertEquals("after 5, 6 is empty", 6, bits.nextClearBit(5)); @@ -61,4 +65,8 @@ public class BitsetTest { } } + static void assertCardinality(BitSet set, int expectedCardinality) { + assertEquals("Checking cardinality", expectedCardinality, set.cardinality()); + } + }