60 lines
1.9 KiB
C++
60 lines
1.9 KiB
C++
|
// Copyright 2019 the V8 project authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#include "src/heap/factory.h"
|
||
|
#include "test/unittests/test-utils.h"
|
||
|
|
||
|
namespace v8 {
|
||
|
namespace internal {
|
||
|
|
||
|
using WeakArrayListTest = TestWithIsolate;
|
||
|
|
||
|
TEST_F(WeakArrayListTest, Compact) {
|
||
|
Handle<WeakArrayList> list = isolate()->factory()->NewWeakArrayList(10);
|
||
|
EXPECT_EQ(list->length(), 0);
|
||
|
EXPECT_EQ(list->capacity(), 10);
|
||
|
|
||
|
MaybeObject some_object =
|
||
|
MaybeObject::FromObject(*isolate()->factory()->empty_fixed_array());
|
||
|
MaybeObject weak_ref = MaybeObject::MakeWeak(some_object);
|
||
|
MaybeObject smi = MaybeObject::FromSmi(Smi::FromInt(0));
|
||
|
MaybeObject cleared_ref = HeapObjectReference::ClearedValue(isolate());
|
||
|
list->Set(0, weak_ref);
|
||
|
list->Set(1, smi);
|
||
|
list->Set(2, cleared_ref);
|
||
|
list->Set(3, cleared_ref);
|
||
|
list->set_length(5);
|
||
|
|
||
|
list->Compact(isolate());
|
||
|
EXPECT_EQ(list->length(), 3);
|
||
|
EXPECT_EQ(list->capacity(), 10);
|
||
|
}
|
||
|
|
||
|
TEST_F(WeakArrayListTest, OutOfPlaceCompact) {
|
||
|
Handle<WeakArrayList> list = isolate()->factory()->NewWeakArrayList(20);
|
||
|
EXPECT_EQ(list->length(), 0);
|
||
|
EXPECT_EQ(list->capacity(), 20);
|
||
|
|
||
|
MaybeObject some_object =
|
||
|
MaybeObject::FromObject(*isolate()->factory()->empty_fixed_array());
|
||
|
MaybeObject weak_ref = MaybeObject::MakeWeak(some_object);
|
||
|
MaybeObject smi = MaybeObject::FromSmi(Smi::FromInt(0));
|
||
|
MaybeObject cleared_ref = HeapObjectReference::ClearedValue(isolate());
|
||
|
list->Set(0, weak_ref);
|
||
|
list->Set(1, smi);
|
||
|
list->Set(2, cleared_ref);
|
||
|
list->Set(3, smi);
|
||
|
list->Set(4, cleared_ref);
|
||
|
list->set_length(6);
|
||
|
|
||
|
Handle<WeakArrayList> compacted =
|
||
|
isolate()->factory()->CompactWeakArrayList(list, 4);
|
||
|
EXPECT_EQ(list->length(), 6);
|
||
|
EXPECT_EQ(compacted->length(), 4);
|
||
|
EXPECT_EQ(compacted->capacity(), 4);
|
||
|
}
|
||
|
|
||
|
} // namespace internal
|
||
|
} // namespace v8
|