weakarraylist-unittest.cc 1.87 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
// 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