summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/BitVectorTest.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-04-10 17:18:54 +0000
committerZachary Turner <zturner@google.com>2017-04-10 17:18:54 +0000
commit843171f33e34de349c273ebbb3e5e02dd4f75fd8 (patch)
treef3da4d6019bf13cd4564eebe8c1d585bbd63fb28 /llvm/unittests/ADT/BitVectorTest.cpp
parent4235b65ae75c30426fbc92560a913f536f3896da (diff)
downloadbcm5719-llvm-843171f33e34de349c273ebbb3e5e02dd4f75fd8.tar.gz
bcm5719-llvm-843171f33e34de349c273ebbb3e5e02dd4f75fd8.zip
[Support] Add support for finding unset bits in a BitVector.
BitVector had methods for searching for the first and next set bits, but it did not have analagous methods for finding the first and next unset bits. This is useful when your ones and zeros are grouped together and you want to iterate over ranges of ones and zeros. Differential Revision: https://reviews.llvm.org/D31802 llvm-svn: 299857
Diffstat (limited to 'llvm/unittests/ADT/BitVectorTest.cpp')
-rw-r--r--llvm/unittests/ADT/BitVectorTest.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/BitVectorTest.cpp b/llvm/unittests/ADT/BitVectorTest.cpp
index 76e796be9eb..f43e591a7f0 100644
--- a/llvm/unittests/ADT/BitVectorTest.cpp
+++ b/llvm/unittests/ADT/BitVectorTest.cpp
@@ -182,6 +182,45 @@ TYPED_TEST(BitVectorTest, TrivialOperation) {
EXPECT_TRUE(Vec.empty());
}
+TYPED_TEST(BitVectorTest, FindOperations) {
+ // Test finding in an empty BitVector.
+ TypeParam A;
+ EXPECT_EQ(-1, A.find_first());
+ EXPECT_EQ(-1, A.find_first_unset());
+ EXPECT_EQ(-1, A.find_next(0));
+ EXPECT_EQ(-1, A.find_next_unset(0));
+
+ // Test finding next set and unset bits in a BitVector with multiple words
+ A.resize(100);
+ A.set(12);
+ A.set(13);
+ A.set(75);
+
+ EXPECT_EQ(12, A.find_first());
+ EXPECT_EQ(13, A.find_next(12));
+ EXPECT_EQ(75, A.find_next(13));
+ EXPECT_EQ(-1, A.find_next(75));
+
+ EXPECT_EQ(0, A.find_first_unset());
+ EXPECT_EQ(14, A.find_next_unset(11));
+ EXPECT_EQ(14, A.find_next_unset(12));
+ EXPECT_EQ(14, A.find_next_unset(13));
+ EXPECT_EQ(16, A.find_next_unset(15));
+ EXPECT_EQ(76, A.find_next_unset(74));
+ EXPECT_EQ(76, A.find_next_unset(75));
+ EXPECT_EQ(-1, A.find_next_unset(99));
+
+ A.set(0, 100);
+ EXPECT_EQ(100, A.count());
+ EXPECT_EQ(0, A.find_first());
+ EXPECT_EQ(-1, A.find_first_unset());
+
+ A.reset(0, 100);
+ EXPECT_EQ(0, A.count());
+ EXPECT_EQ(-1, A.find_first());
+ EXPECT_EQ(0, A.find_first_unset());
+}
+
TYPED_TEST(BitVectorTest, CompoundAssignment) {
TypeParam A;
A.resize(10);
OpenPOWER on IntegriCloud