| Index: test/cctest/test-heap.cc
|
| diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc
|
| index 28933fb86beaa169eb0b19e76241a4d6e2132ef3..86be15a5ca272aad04ad804ad589c322f7ca31a4 100644
|
| --- a/test/cctest/test-heap.cc
|
| +++ b/test/cctest/test-heap.cc
|
| @@ -1221,6 +1221,50 @@ TEST(TestSizeOfObjectsVsHeapIteratorPrecision) {
|
| }
|
|
|
|
|
| +TEST(GrowAndShrinkNewSpace) {
|
| + InitializeVM();
|
| + v8::HandleScope scope;
|
| + NewSpace* new_space = HEAP->new_space();
|
| +
|
| + // Explicitly growing should double the space capacity.
|
| + int old_capacity, new_capacity;
|
| + old_capacity = new_space->Capacity();
|
| + new_space->Grow();
|
| + new_capacity = new_space->Capacity();
|
| + ASSERT_EQ(2 * old_capacity, new_capacity);
|
| +
|
| + // Fill up new space to the point that it exceeds old capacity.
|
| + while (new_space->SizeAsInt() <= old_capacity) {
|
| + Handle<FixedArray> filler = FACTORY->NewFixedArray(1000, NOT_TENURED);
|
| + ASSERT(HEAP->InNewSpace(*FACTORY->NewFixedArray(1000, NOT_TENURED)));
|
| + }
|
| +
|
| + // Explicitly shrinking should not affect space capacity.
|
| + old_capacity = new_space->Capacity();
|
| + new_space->Shrink();
|
| + new_capacity = new_space->Capacity();
|
| + ASSERT_EQ(old_capacity, new_capacity);
|
| +
|
| + // Perform scavenge to empty the new space.
|
| + HEAP->CollectGarbage(NEW_SPACE);
|
| + ASSERT_LE(new_space->SizeAsInt(), old_capacity);
|
| +
|
| + // Explicitly shrinking should halve the space capacity.
|
| + old_capacity = new_space->Capacity();
|
| + new_space->Shrink();
|
| + new_capacity = new_space->Capacity();
|
| + ASSERT_EQ(old_capacity, 2 * new_capacity);
|
| +
|
| + // Consecutive shrinking should not affect space capacity.
|
| + old_capacity = new_space->Capacity();
|
| + new_space->Shrink();
|
| + new_space->Shrink();
|
| + new_space->Shrink();
|
| + new_capacity = new_space->Capacity();
|
| + ASSERT_EQ(old_capacity, new_capacity);
|
| +}
|
| +
|
| +
|
| class HeapIteratorTestHelper {
|
| public:
|
| HeapIteratorTestHelper(Object* a, Object* b)
|
|
|