Index: test/unittests/heap/marking-unittest.cc |
diff --git a/test/unittests/heap/marking-unittest.cc b/test/unittests/heap/marking-unittest.cc |
index 5be909a1a400a7f7babe9d30cf749df4b78cb5f3..0d90019d5cb93fba4629d99ba93f1d90d47be8c5 100644 |
--- a/test/unittests/heap/marking-unittest.cc |
+++ b/test/unittests/heap/marking-unittest.cc |
@@ -110,5 +110,37 @@ TEST(Marking, TransitionWhiteGreyBlackGrey) { |
free(bitmap); |
} |
+TEST(Marking, SetAndClearRange) { |
+ Bitmap* bitmap = reinterpret_cast<Bitmap*>( |
+ calloc(Bitmap::kSize / kPointerSize, kPointerSize)); |
+ for (int i = 0; i < 3; i++) { |
+ bitmap->SetRange(i, Bitmap::kBitsPerCell + i); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[0], 0xffffffff << i); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[1], (1 << i) - 1); |
+ bitmap->ClearRange(i, Bitmap::kBitsPerCell + i); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[0], 0x0); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[1], 0x0); |
+ } |
+ free(bitmap); |
+} |
+ |
+TEST(Marking, ClearMultipleRanges) { |
+ Bitmap* bitmap = reinterpret_cast<Bitmap*>( |
+ calloc(Bitmap::kSize / kPointerSize, kPointerSize)); |
+ bitmap->SetRange(0, Bitmap::kBitsPerCell * 3); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[0], 0xffffffff); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[1], 0xffffffff); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[2], 0xffffffff); |
+ bitmap->ClearRange(Bitmap::kBitsPerCell / 2, Bitmap::kBitsPerCell); |
+ bitmap->ClearRange(Bitmap::kBitsPerCell, |
+ Bitmap::kBitsPerCell + Bitmap::kBitsPerCell / 2); |
+ bitmap->ClearRange(Bitmap::kBitsPerCell * 2 + 8, |
+ Bitmap::kBitsPerCell * 2 + 16); |
+ bitmap->ClearRange(Bitmap::kBitsPerCell * 2 + 24, Bitmap::kBitsPerCell * 3); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[0], 0xffff); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[1], 0xffff0000); |
+ CHECK_EQ(reinterpret_cast<uint32_t*>(bitmap)[2], 0xff00ff); |
+ free(bitmap); |
+} |
} // namespace internal |
} // namespace v8 |