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());
}