// TestArenaBitMap is the shorthand combination of Arena and ArenaBitMap. // Multiple inheritance guarantees to construct Arena first. class TestArenaBitMap : private Arena, public ArenaBitMap { public:
TestArenaBitMap() : TestArenaBitMap(0) {}
TestArenaBitMap(idx_t size_in_bits, bool clear = true) : Arena(mtTest),
ArenaBitMap(static_cast<Arena*>(this), size_in_bits, clear) {}
};
class TestCHeapBitMap : public CHeapBitMap { public:
TestCHeapBitMap(size_t size = 0) : CHeapBitMap(size, mtTest) {}
};
TEST_VM(BitMap, resize_grow) {
BitMapTest::testResizeGrow<ResourceBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ResourceBitMap";
BitMapTest::testResizeGrow<TestCHeapBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type CHeapBitMap";
BitMapTest::testResizeGrow<TestArenaBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ArenaBitMap";
}
TEST_VM(BitMap, resize_shrink) {
BitMapTest::testResizeShrink<ResourceBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ResourceBitMap";
BitMapTest::testResizeShrink<TestCHeapBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type CHeapBitMap";
BitMapTest::testResizeShrink<TestArenaBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ArenaBitMap";
}
TEST_VM(BitMap, resize_same) {
BitMapTest::testResizeSame<ResourceBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ResourceBitMap";
BitMapTest::testResizeSame<TestCHeapBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type CHeapBitMap";
BitMapTest::testResizeSame<TestArenaBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ArenaBitMap";
}
// Verify that when growing with clear, all added bits get cleared, // even those corresponding to a partial word after the old size.
TEST_VM(BitMap, resize_grow_clear) {
ResourceMark rm; const size_t word_size = sizeof(BitMap::bm_word_t) * BitsPerByte; const size_t size = 4 * word_size;
ResourceBitMap bm(size, true/* clear */);
bm.set_bit(size - 1);
EXPECT_EQ(bm.count_one_bits(), size_t(1)); // Discard the only set bit. But it might still be "set" in the // partial word beyond the new size.
bm.resize(size - word_size/2);
EXPECT_EQ(bm.count_one_bits(), size_t(0)); // Grow to include the previously set bit. Verify that it ended up cleared.
bm.resize(2 * size);
EXPECT_EQ(bm.count_one_bits(), size_t(0));
}
TEST_VM(BitMap, initialize) {
BitMapTest::testInitialize<ResourceBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ResourceBitMap";
BitMapTest::testInitialize<TestCHeapBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type CHeapBitMap";
BitMapTest::testInitialize<TestArenaBitMap>();
EXPECT_FALSE(HasFailure()) << "Failed on type ArenaBitMap";
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.