/* * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
// 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 ist noch experimentell.