forked from OSchip/llvm-project
Make BitVector::operator== return false for different-sized vectors.
This behaviour is in line with SmallBitVector and other vector-like types. Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D77027
This commit is contained in:
parent
60c642e74b
commit
27f1895f53
|
@ -532,24 +532,10 @@ public:
|
|||
|
||||
// Comparison operators.
|
||||
bool operator==(const BitVector &RHS) const {
|
||||
unsigned ThisWords = NumBitWords(size());
|
||||
unsigned RHSWords = NumBitWords(RHS.size());
|
||||
unsigned i;
|
||||
for (i = 0; i != std::min(ThisWords, RHSWords); ++i)
|
||||
if (Bits[i] != RHS.Bits[i])
|
||||
if (size() != RHS.size())
|
||||
return false;
|
||||
|
||||
// Verify that any extra words are all zeros.
|
||||
if (i != ThisWords) {
|
||||
for (; i != ThisWords; ++i)
|
||||
if (Bits[i])
|
||||
return false;
|
||||
} else if (i != RHSWords) {
|
||||
for (; i != RHSWords; ++i)
|
||||
if (RHS.Bits[i])
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
unsigned NumWords = NumBitWords(size());
|
||||
return Bits.take_front(NumWords) == RHS.Bits.take_front(NumWords);
|
||||
}
|
||||
|
||||
bool operator!=(const BitVector &RHS) const {
|
||||
|
|
|
@ -179,6 +179,24 @@ TYPED_TEST(BitVectorTest, TrivialOperation) {
|
|||
EXPECT_TRUE(Vec.empty());
|
||||
}
|
||||
|
||||
TYPED_TEST(BitVectorTest, Equality) {
|
||||
TypeParam A;
|
||||
TypeParam B;
|
||||
EXPECT_TRUE(A == B);
|
||||
A.resize(10);
|
||||
EXPECT_FALSE(A == B);
|
||||
B.resize(10);
|
||||
EXPECT_TRUE(A == B);
|
||||
A.set(5);
|
||||
EXPECT_FALSE(A == B);
|
||||
B.set(5);
|
||||
EXPECT_TRUE(A == B);
|
||||
A.resize(20);
|
||||
EXPECT_FALSE(A == B);
|
||||
B.resize(20);
|
||||
EXPECT_TRUE(A == B);
|
||||
}
|
||||
|
||||
TYPED_TEST(BitVectorTest, SimpleFindOpsMultiWord) {
|
||||
TypeParam A;
|
||||
|
||||
|
|
Loading…
Reference in New Issue