| Index: test/unittests/heap/slot-set-unittest.cc
|
| diff --git a/test/unittests/heap/slot-set-unittest.cc b/test/unittests/heap/slot-set-unittest.cc
|
| index ac784e43ce09b73e410b9533b03bf0a664eca902..797cd4a83c8c600148854edb8c3e43248df06610 100644
|
| --- a/test/unittests/heap/slot-set-unittest.cc
|
| +++ b/test/unittests/heap/slot-set-unittest.cc
|
| @@ -94,34 +94,37 @@ TEST(SlotSet, Remove) {
|
| }
|
| }
|
|
|
| -TEST(SlotSet, RemoveRange) {
|
| +void CheckRemoveRangeOn(uint32_t start, uint32_t end) {
|
| SlotSet set;
|
| set.SetPageStart(0);
|
| - for (int i = 0; i < Page::kPageSize; i += kPointerSize) {
|
| + uint32_t first = start == 0 ? 0 : start - kPointerSize;
|
| + for (uint32_t i = first; i <= end; i += kPointerSize) {
|
| set.Insert(i);
|
| }
|
| -
|
| - set.RemoveRange(0, Page::kPageSize);
|
| -
|
| - for (int i = 0; i < Page::kPageSize; i += kPointerSize) {
|
| - EXPECT_FALSE(set.Lookup(i));
|
| + set.RemoveRange(start, end);
|
| + if (first != start) {
|
| + EXPECT_TRUE(set.Lookup(first));
|
| }
|
| -
|
| - for (int i = 0; i < Page::kPageSize; i += kPointerSize) {
|
| - set.Insert(i);
|
| + EXPECT_TRUE(set.Lookup(end));
|
| + for (uint32_t i = start; i < end; i += kPointerSize) {
|
| + EXPECT_FALSE(set.Lookup(i));
|
| }
|
| +}
|
|
|
| - set.RemoveRange(10 * kPointerSize, 10 * kPointerSize);
|
| - EXPECT_TRUE(set.Lookup(9 * kPointerSize));
|
| - EXPECT_TRUE(set.Lookup(10 * kPointerSize));
|
| - EXPECT_TRUE(set.Lookup(11 * kPointerSize));
|
| -
|
| - set.RemoveRange(10 * kPointerSize, 1000 * kPointerSize);
|
| - for (int i = 0; i < Page::kPageSize; i += kPointerSize) {
|
| - if (10 * kPointerSize <= i && i < 1000 * kPointerSize) {
|
| - EXPECT_FALSE(set.Lookup(i));
|
| - } else {
|
| - EXPECT_TRUE(set.Lookup(i));
|
| +TEST(SlotSet, RemoveRange) {
|
| + CheckRemoveRangeOn(0, Page::kPageSize);
|
| + CheckRemoveRangeOn(1 * kPointerSize, 1023 * kPointerSize);
|
| + for (uint32_t start = 0; start <= 32; start++) {
|
| + CheckRemoveRangeOn(start * kPointerSize, (start + 1) * kPointerSize);
|
| + CheckRemoveRangeOn(start * kPointerSize, (start + 2) * kPointerSize);
|
| + const uint32_t kEnds[] = {32, 64, 100, 128, 1024, 1500, 2048};
|
| + for (int i = 0; i < sizeof(kEnds) / sizeof(uint32_t); i++) {
|
| + for (int k = -3; k <= 3; k++) {
|
| + uint32_t end = (kEnds[i] + k);
|
| + if (start < end) {
|
| + CheckRemoveRangeOn(start * kPointerSize, end * kPointerSize);
|
| + }
|
| + }
|
| }
|
| }
|
| }
|
|
|