Miscellaneous Fixes for SparseBitVector

Summary:

1. Fix return value in `SparseBitVector::operator&=`.
2. Add checks if SBV is being assigned is invoking SBV.

Reviewers: dberlin

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11342

Committed on behalf of sl@

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242693 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Berlin
2015-07-20 18:26:23 +00:00
parent d20688a1eb
commit 1cc7da7305
2 changed files with 125 additions and 1 deletions

View File

@@ -33,4 +33,98 @@ TEST(SparseBitVectorTest, TrivialOperation) {
EXPECT_FALSE(Vec.test(17));
}
TEST(SparseBitVectorTest, IntersectWith) {
SparseBitVector<> Vec, Other;
Vec.set(1);
Other.set(1);
EXPECT_FALSE(Vec &= Other);
EXPECT_TRUE(Vec.test(1));
Vec.clear();
Vec.set(5);
Other.clear();
Other.set(6);
EXPECT_TRUE(Vec &= Other);
EXPECT_TRUE(Vec.empty());
Vec.clear();
Vec.set(5);
Other.clear();
Other.set(225);
EXPECT_TRUE(Vec &= Other);
EXPECT_TRUE(Vec.empty());
Vec.clear();
Vec.set(225);
Other.clear();
Other.set(5);
EXPECT_TRUE(Vec &= Other);
EXPECT_TRUE(Vec.empty());
}
TEST(SparseBitVectorTest, SelfAssignment) {
SparseBitVector<> Vec, Other;
Vec.set(23);
Vec.set(234);
Vec = Vec;
EXPECT_TRUE(Vec.test(23));
EXPECT_TRUE(Vec.test(234));
Vec.clear();
Vec.set(17);
Vec.set(256);
EXPECT_FALSE(Vec |= Vec);
EXPECT_TRUE(Vec.test(17));
EXPECT_TRUE(Vec.test(256));
Vec.clear();
Vec.set(56);
Vec.set(517);
EXPECT_FALSE(Vec &= Vec);
EXPECT_TRUE(Vec.test(56));
EXPECT_TRUE(Vec.test(517));
Vec.clear();
Vec.set(99);
Vec.set(333);
EXPECT_TRUE(Vec.intersectWithComplement(Vec));
EXPECT_TRUE(Vec.empty());
EXPECT_FALSE(Vec.intersectWithComplement(Vec));
Vec.clear();
Vec.set(28);
Vec.set(43);
Vec.intersectWithComplement(Vec, Vec);
EXPECT_TRUE(Vec.empty());
Vec.clear();
Vec.set(42);
Vec.set(567);
Other.set(55);
Other.set(567);
Vec.intersectWithComplement(Vec, Other);
EXPECT_TRUE(Vec.test(42));
EXPECT_FALSE(Vec.test(567));
Vec.clear();
Vec.set(19);
Vec.set(21);
Other.clear();
Other.set(19);
Other.set(31);
Vec.intersectWithComplement(Other, Vec);
EXPECT_FALSE(Vec.test(19));
EXPECT_TRUE(Vec.test(31));
Vec.clear();
Vec.set(1);
Other.clear();
Other.set(59);
Other.set(75);
Vec.intersectWithComplement(Other, Other);
EXPECT_TRUE(Vec.empty());
}
}