| Index: test/cctest/test-weaksets.cc
|
| diff --git a/test/cctest/test-weakmaps.cc b/test/cctest/test-weaksets.cc
|
| similarity index 76%
|
| copy from test/cctest/test-weakmaps.cc
|
| copy to test/cctest/test-weaksets.cc
|
| index 9044f17e4e39f7b56aeef11462457220090c52f7..707f903284889a30f70d5c65e46e43861ca2d3e4 100644
|
| --- a/test/cctest/test-weakmaps.cc
|
| +++ b/test/cctest/test-weaksets.cc
|
| @@ -39,28 +39,28 @@ static Isolate* GetIsolateFrom(LocalContext* context) {
|
| }
|
|
|
|
|
| -static Handle<JSWeakMap> AllocateJSWeakMap(Isolate* isolate) {
|
| +static Handle<JSWeakSet> AllocateJSWeakSet(Isolate* isolate) {
|
| Factory* factory = isolate->factory();
|
| Heap* heap = isolate->heap();
|
| - Handle<Map> map = factory->NewMap(JS_WEAK_MAP_TYPE, JSWeakMap::kSize);
|
| - Handle<JSObject> weakmap_obj = factory->NewJSObjectFromMap(map);
|
| - Handle<JSWeakMap> weakmap(JSWeakMap::cast(*weakmap_obj));
|
| + Handle<Map> map = factory->NewMap(JS_WEAK_SET_TYPE, JSWeakSet::kSize);
|
| + Handle<JSObject> weakset_obj = factory->NewJSObjectFromMap(map);
|
| + Handle<JSWeakSet> weakset(JSWeakSet::cast(*weakset_obj));
|
| // Do not use handles for the hash table, it would make entries strong.
|
| Object* table_obj = ObjectHashTable::Allocate(heap, 1)->ToObjectChecked();
|
| ObjectHashTable* table = ObjectHashTable::cast(table_obj);
|
| - weakmap->set_table(table);
|
| - weakmap->set_next(Smi::FromInt(0));
|
| - return weakmap;
|
| + weakset->set_table(table);
|
| + weakset->set_next(Smi::FromInt(0));
|
| + return weakset;
|
| }
|
|
|
| -static void PutIntoWeakMap(Handle<JSWeakMap> weakmap,
|
| +static void PutIntoWeakSet(Handle<JSWeakSet> weakset,
|
| Handle<JSObject> key,
|
| Handle<Object> value) {
|
| Handle<ObjectHashTable> table = PutIntoObjectHashTable(
|
| - Handle<ObjectHashTable>(ObjectHashTable::cast(weakmap->table())),
|
| + Handle<ObjectHashTable>(ObjectHashTable::cast(weakset->table())),
|
| Handle<JSObject>(JSObject::cast(*key)),
|
| value);
|
| - weakmap->set_table(*table);
|
| + weakset->set_table(*table);
|
| }
|
|
|
| static int NumberOfWeakCalls = 0;
|
| @@ -73,14 +73,14 @@ static void WeakPointerCallback(v8::Isolate* isolate,
|
| }
|
|
|
|
|
| -TEST(Weakness) {
|
| +TEST(WeakSet_Weakness) {
|
| FLAG_incremental_marking = false;
|
| LocalContext context;
|
| Isolate* isolate = GetIsolateFrom(&context);
|
| Factory* factory = isolate->factory();
|
| Heap* heap = isolate->heap();
|
| HandleScope scope(isolate);
|
| - Handle<JSWeakMap> weakmap = AllocateJSWeakMap(isolate);
|
| + Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
| GlobalHandles* global_handles = isolate->global_handles();
|
|
|
| // Keep global reference to the key.
|
| @@ -93,21 +93,21 @@ TEST(Weakness) {
|
| }
|
| CHECK(!global_handles->IsWeak(key.location()));
|
|
|
| - // Put entry into weak map.
|
| + // Put entry into weak set.
|
| {
|
| HandleScope scope(isolate);
|
| - PutIntoWeakMap(weakmap,
|
| + PutIntoWeakSet(weakset,
|
| Handle<JSObject>(JSObject::cast(*key)),
|
| Handle<Smi>(Smi::FromInt(23), isolate));
|
| }
|
| - CHECK_EQ(1, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(1, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
|
|
| // Force a full GC.
|
| heap->CollectAllGarbage(false);
|
| CHECK_EQ(0, NumberOfWeakCalls);
|
| - CHECK_EQ(1, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(1, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
| CHECK_EQ(
|
| - 0, ObjectHashTable::cast(weakmap->table())->NumberOfDeletedElements());
|
| + 0, ObjectHashTable::cast(weakset->table())->NumberOfDeletedElements());
|
|
|
| // Make the global reference to the key weak.
|
| {
|
| @@ -120,61 +120,61 @@ TEST(Weakness) {
|
|
|
| // Force a full GC.
|
| // Perform two consecutive GCs because the first one will only clear
|
| - // weak references whereas the second one will also clear weak maps.
|
| + // weak references whereas the second one will also clear weak sets.
|
| heap->CollectAllGarbage(false);
|
| CHECK_EQ(1, NumberOfWeakCalls);
|
| - CHECK_EQ(1, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(1, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
| CHECK_EQ(
|
| - 0, ObjectHashTable::cast(weakmap->table())->NumberOfDeletedElements());
|
| + 0, ObjectHashTable::cast(weakset->table())->NumberOfDeletedElements());
|
| heap->CollectAllGarbage(false);
|
| CHECK_EQ(1, NumberOfWeakCalls);
|
| - CHECK_EQ(0, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(0, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
| CHECK_EQ(
|
| - 1, ObjectHashTable::cast(weakmap->table())->NumberOfDeletedElements());
|
| + 1, ObjectHashTable::cast(weakset->table())->NumberOfDeletedElements());
|
| }
|
|
|
|
|
| -TEST(Shrinking) {
|
| +TEST(WeakSet_Shrinking) {
|
| LocalContext context;
|
| Isolate* isolate = GetIsolateFrom(&context);
|
| Factory* factory = isolate->factory();
|
| Heap* heap = isolate->heap();
|
| HandleScope scope(isolate);
|
| - Handle<JSWeakMap> weakmap = AllocateJSWeakMap(isolate);
|
| + Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
|
|
| // Check initial capacity.
|
| - CHECK_EQ(32, ObjectHashTable::cast(weakmap->table())->Capacity());
|
| + CHECK_EQ(32, ObjectHashTable::cast(weakset->table())->Capacity());
|
|
|
| - // Fill up weak map to trigger capacity change.
|
| + // Fill up weak set to trigger capacity change.
|
| {
|
| HandleScope scope(isolate);
|
| Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
|
| for (int i = 0; i < 32; i++) {
|
| Handle<JSObject> object = factory->NewJSObjectFromMap(map);
|
| - PutIntoWeakMap(weakmap, object, Handle<Smi>(Smi::FromInt(i), isolate));
|
| + PutIntoWeakSet(weakset, object, Handle<Smi>(Smi::FromInt(i), isolate));
|
| }
|
| }
|
|
|
| // Check increased capacity.
|
| - CHECK_EQ(128, ObjectHashTable::cast(weakmap->table())->Capacity());
|
| + CHECK_EQ(128, ObjectHashTable::cast(weakset->table())->Capacity());
|
|
|
| // Force a full GC.
|
| - CHECK_EQ(32, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(32, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
| CHECK_EQ(
|
| - 0, ObjectHashTable::cast(weakmap->table())->NumberOfDeletedElements());
|
| + 0, ObjectHashTable::cast(weakset->table())->NumberOfDeletedElements());
|
| heap->CollectAllGarbage(false);
|
| - CHECK_EQ(0, ObjectHashTable::cast(weakmap->table())->NumberOfElements());
|
| + CHECK_EQ(0, ObjectHashTable::cast(weakset->table())->NumberOfElements());
|
| CHECK_EQ(
|
| - 32, ObjectHashTable::cast(weakmap->table())->NumberOfDeletedElements());
|
| + 32, ObjectHashTable::cast(weakset->table())->NumberOfDeletedElements());
|
|
|
| // Check shrunk capacity.
|
| - CHECK_EQ(32, ObjectHashTable::cast(weakmap->table())->Capacity());
|
| + CHECK_EQ(32, ObjectHashTable::cast(weakset->table())->Capacity());
|
| }
|
|
|
|
|
| -// Test that weak map values on an evacuation candidate which are not reachable
|
| +// Test that weak set values on an evacuation candidate which are not reachable
|
| // by other paths are correctly recorded in the slots buffer.
|
| -TEST(Regress2060a) {
|
| +TEST(WeakSet_Regress2060a) {
|
| FLAG_always_compact = true;
|
| LocalContext context;
|
| Isolate* isolate = GetIsolateFrom(&context);
|
| @@ -184,20 +184,20 @@ TEST(Regress2060a) {
|
| Handle<JSFunction> function =
|
| factory->NewFunction(factory->function_string(), factory->null_value());
|
| Handle<JSObject> key = factory->NewJSObject(function);
|
| - Handle<JSWeakMap> weakmap = AllocateJSWeakMap(isolate);
|
| + Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
|
|
| // Start second old-space page so that values land on evacuation candidate.
|
| Page* first_page = heap->old_pointer_space()->anchor()->next_page();
|
| factory->NewFixedArray(900 * KB / kPointerSize, TENURED);
|
|
|
| - // Fill up weak map with values on an evacuation candidate.
|
| + // Fill up weak set with values on an evacuation candidate.
|
| {
|
| HandleScope scope(isolate);
|
| for (int i = 0; i < 32; i++) {
|
| Handle<JSObject> object = factory->NewJSObject(function, TENURED);
|
| CHECK(!heap->InNewSpace(object->address()));
|
| CHECK(!first_page->Contains(object->address()));
|
| - PutIntoWeakMap(weakmap, key, object);
|
| + PutIntoWeakSet(weakset, key, object);
|
| }
|
| }
|
|
|
| @@ -207,9 +207,9 @@ TEST(Regress2060a) {
|
| }
|
|
|
|
|
| -// Test that weak map keys on an evacuation candidate which are reachable by
|
| +// Test that weak set keys on an evacuation candidate which are reachable by
|
| // other strong paths are correctly recorded in the slots buffer.
|
| -TEST(Regress2060b) {
|
| +TEST(WeakSet_Regress2060b) {
|
| FLAG_always_compact = true;
|
| #ifdef VERIFY_HEAP
|
| FLAG_verify_heap = true;
|
| @@ -227,16 +227,16 @@ TEST(Regress2060b) {
|
| Page* first_page = heap->old_pointer_space()->anchor()->next_page();
|
| factory->NewFixedArray(900 * KB / kPointerSize, TENURED);
|
|
|
| - // Fill up weak map with keys on an evacuation candidate.
|
| + // Fill up weak set with keys on an evacuation candidate.
|
| Handle<JSObject> keys[32];
|
| for (int i = 0; i < 32; i++) {
|
| keys[i] = factory->NewJSObject(function, TENURED);
|
| CHECK(!heap->InNewSpace(keys[i]->address()));
|
| CHECK(!first_page->Contains(keys[i]->address()));
|
| }
|
| - Handle<JSWeakMap> weakmap = AllocateJSWeakMap(isolate);
|
| + Handle<JSWeakSet> weakset = AllocateJSWeakSet(isolate);
|
| for (int i = 0; i < 32; i++) {
|
| - PutIntoWeakMap(weakmap,
|
| + PutIntoWeakSet(weakset,
|
| keys[i],
|
| Handle<Smi>(Smi::FromInt(i), isolate));
|
| }
|
|
|