From b51dcaf0f6661dff29d5d9f868a9dffa9f1c5342 Mon Sep 17 00:00:00 2001 From: tedyu Date: Wed, 6 May 2015 11:36:44 -0700 Subject: [PATCH] Add unit test in BitSetSuite for BitSet#anySet() --- .../main/java/org/apache/spark/unsafe/bitset/BitSet.java | 8 ++++++++ .../org/apache/spark/unsafe/bitset/BitSetMethods.java | 9 ++++----- .../java/org/apache/spark/unsafe/bitset/BitSetSuite.java | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java index f72e07fce92fd..65915ab267930 100644 --- a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java +++ b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSet.java @@ -102,4 +102,12 @@ public boolean isSet(int index) { public int nextSetBit(int fromIndex) { return BitSetMethods.nextSetBit(baseObject, baseOffset, fromIndex, numWords); } + + /* + * @return whether any bit in the BitSet is set + */ + public boolean anySet() { + return BitSetMethods.anySet(baseObject, baseOffset, numWords*BitSetMethods.WORD_SIZE); + } + } diff --git a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java index 70cfb2e818f3f..c6b536b233b60 100644 --- a/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java +++ b/unsafe/src/main/java/org/apache/spark/unsafe/bitset/BitSetMethods.java @@ -28,8 +28,7 @@ */ public final class BitSetMethods { - private static final long WORD_SIZE = 8; - private static final int SIZE_OF_LONG = Long.SIZE; + static final long WORD_SIZE = 8; private BitSetMethods() { // Make the default constructor private, since this only holds static methods. @@ -72,10 +71,10 @@ public static boolean isSet(Object baseObject, long baseOffset, int index) { * Returns {@code true} if any bit is set. */ public static boolean anySet(Object baseObject, long baseOffset, long bitSetWidthInBytes) { - assert bitSetWidthInBytes % SIZE_OF_LONG == 0; - int widthInLong = (int)(bitSetWidthInBytes / SIZE_OF_LONG); + assert bitSetWidthInBytes % WORD_SIZE == 0; + int widthInLong = (int)(bitSetWidthInBytes / WORD_SIZE); long addr = baseOffset; - for (int i = 0; i <= widthInLong; i++, addr += SIZE_OF_LONG) { + for (int i = 0; i <= widthInLong; i++, addr += WORD_SIZE) { if (PlatformDependent.UNSAFE.getLong(baseObject, addr) != 0) { return true; } diff --git a/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java b/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java index e3a824e29b768..85f3bb02ec96b 100644 --- a/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java +++ b/unsafe/src/test/java/org/apache/spark/unsafe/bitset/BitSetSuite.java @@ -39,6 +39,7 @@ public void basicOps() { for (int i = 0; i < bs.capacity(); i++) { Assert.assertFalse(bs.isSet(i)); } + Assert.assertFalse(bs.anySet()); // Set every bit and check it. for (int i = 0; i < bs.capacity(); i++) {