TEST(ClusteredBitVector, AssignAfterGrowth) { ClusteredBitVector temp; temp.appendClearBits(118); ClusteredBitVector vec; vec.appendSetBits(65); vec = std::move(temp); EXPECT_EQ(false, vec[64]); }
TEST(ClusteredBitVector, MultiChunkAppend) { ClusteredBitVector temp; temp.appendSetBits(72); temp.appendClearBits(22); temp.appendSetBits(83); ClusteredBitVector vec; vec.add(16, 0x000000000000967b); vec.append(temp); EXPECT_EQ(true, vec[64]); }
ClusteredBitVector ClusteredBitVector::fromAPInt(const llvm::APInt &bits) { // This is not a very efficient algorithm. ClusteredBitVector result; for (unsigned i = 0, e = bits.getBitWidth(); i != e; ++i) { if (bits[i]) { result.appendSetBits(1); } else { result.appendClearBits(1); } } return result; }
TEST(ClusteredBitVector, Copies) { ClusteredBitVector orig; orig.appendClearBits(71); ClusteredBitVector copy = orig; ClusteredBitVector vec; vec = copy; EXPECT_EQ(71u, vec.size()); EXPECT_EQ(71u, copy.size()); EXPECT_EQ(71u, orig.size()); EXPECT_EQ(false, vec[64]); EXPECT_EQ(false, copy[64]); EXPECT_EQ(false, orig[64]); }
TEST(ClusteredBitVector, FlipAllBig) { ClusteredBitVector vec; vec.appendClearBits(163); EXPECT_EQ(false, vec[12]); EXPECT_EQ(0u, vec.count()); vec.flipAll(); EXPECT_EQ(true, vec[12]); EXPECT_EQ(163u, vec.count()); vec.clearBit(7); EXPECT_EQ(true, vec[12]); EXPECT_EQ(false, vec[7]); EXPECT_EQ(162u, vec.count()); vec.flipAll(); EXPECT_EQ(false, vec[12]); EXPECT_EQ(true, vec[7]); EXPECT_EQ(1u, vec.count()); }
TEST(ClusteredBitVector, FlipAllSmall) { ClusteredBitVector vec; vec.appendClearBits(48); EXPECT_EQ(false, vec[12]); EXPECT_EQ(0u, vec.count()); vec.flipAll(); EXPECT_EQ(true, vec[12]); EXPECT_EQ(48u, vec.count()); vec.clearBit(7); EXPECT_EQ(true, vec[12]); EXPECT_EQ(false, vec[7]); EXPECT_EQ(47u, vec.count()); vec.flipAll(); EXPECT_EQ(false, vec[12]); EXPECT_EQ(true, vec[7]); EXPECT_EQ(1u, vec.count()); }
TEST(ClusteredBitVector, CopyClearIntoAllocated) { ClusteredBitVector temp; temp.appendSetBits(94); ClusteredBitVector orig; orig.appendClearBits(71); ClusteredBitVector copy = orig; ClusteredBitVector vec; vec = temp; vec = copy; EXPECT_EQ(71u, vec.size()); EXPECT_EQ(71u, copy.size()); EXPECT_EQ(71u, orig.size()); EXPECT_EQ(false, vec[64]); EXPECT_EQ(false, copy[64]); EXPECT_EQ(false, orig[64]); }
TEST(ClusteredBitVector, SetClearBit) { ClusteredBitVector vec; vec.appendClearBits(64); vec.setBit(3); vec.setBit(7); vec.setBit(7); vec.setBit(63); EXPECT_EQ(3u, vec.count()); EXPECT_EQ(true, vec[3]); EXPECT_EQ(true, vec[7]); EXPECT_EQ(true, vec[63]); EXPECT_EQ(false, vec[0]); EXPECT_EQ(false, vec[14]); EXPECT_EQ(false, vec[62]); vec.clearBit(63); EXPECT_EQ(2u, vec.count()); EXPECT_EQ(false, vec[63]); }
TEST(ClusteredBitVector, Enumeration) { ClusteredBitVector temp; temp.appendClearBits(256); temp.setBit(64); temp.setBit(40); temp.setBit(39); temp.setBit(63); temp.setBit(201); using Opt = ComparableOptional<size_t>; auto enumerator = temp.enumerateSetBits(); EXPECT_EQ(Opt(39), enumerator.findNext()); EXPECT_EQ(Opt(40), enumerator.findNext()); EXPECT_EQ(Opt(63), enumerator.findNext()); EXPECT_EQ(Opt(64), enumerator.findNext()); EXPECT_EQ(Opt(201), enumerator.findNext()); EXPECT_EQ(Opt(), enumerator.findNext()); EXPECT_EQ(Opt(), enumerator.findNext()); EXPECT_EQ(Opt(), enumerator.findNext()); }