Index: test/cctest/test-transitions.cc |
diff --git a/test/cctest/test-transitions.cc b/test/cctest/test-transitions.cc |
deleted file mode 100644 |
index 94e230c04289b412a629e382a6bd598de06018c7..0000000000000000000000000000000000000000 |
--- a/test/cctest/test-transitions.cc |
+++ /dev/null |
@@ -1,283 +0,0 @@ |
-// Copyright 2014 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 <stdlib.h> |
-#include <utility> |
- |
-#include "src/v8.h" |
- |
-#include "src/compilation-cache.h" |
-#include "src/execution.h" |
-#include "src/factory.h" |
-#include "src/global-handles.h" |
-#include "test/cctest/cctest.h" |
- |
-using namespace v8::internal; |
- |
- |
-// |
-// Helper functions. |
-// |
- |
-static void ConnectTransition(Handle<Map> parent, |
- Handle<TransitionArray> transitions, |
- Handle<Map> child) { |
- if (!parent->HasTransitionArray() || *transitions != parent->transitions()) { |
- parent->set_transitions(*transitions); |
- } |
- child->SetBackPointer(*parent); |
-} |
- |
- |
-TEST(TransitionArray_SimpleFieldTransitions) { |
- CcTest::InitializeVM(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Isolate* isolate = CcTest::i_isolate(); |
- Factory* factory = isolate->factory(); |
- |
- Handle<String> name1 = factory->InternalizeUtf8String("foo"); |
- Handle<String> name2 = factory->InternalizeUtf8String("bar"); |
- PropertyAttributes attributes = NONE; |
- |
- Handle<Map> map0 = Map::Create(isolate, 0); |
- Handle<Map> map1 = |
- Map::CopyWithField(map0, name1, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- Handle<Map> map2 = |
- Map::CopyWithField(map0, name2, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- |
- CHECK(!map0->HasTransitionArray()); |
- Handle<TransitionArray> transitions = TransitionArray::Allocate(isolate, 0); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- int transition; |
- transitions = |
- transitions->Insert(map0, name1, map1, SIMPLE_PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map1); |
- CHECK(transitions->IsSimpleTransition()); |
- transition = transitions->Search(FIELD, *name1, attributes); |
- CHECK_EQ(TransitionArray::kSimpleTransitionIndex, transition); |
- CHECK_EQ(*name1, transitions->GetKey(transition)); |
- CHECK_EQ(*map1, transitions->GetTarget(transition)); |
- |
- transitions = |
- transitions->Insert(map0, name2, map2, SIMPLE_PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map2); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- transition = transitions->Search(FIELD, *name1, attributes); |
- CHECK_EQ(*name1, transitions->GetKey(transition)); |
- CHECK_EQ(*map1, transitions->GetTarget(transition)); |
- |
- transition = transitions->Search(FIELD, *name2, attributes); |
- CHECK_EQ(*name2, transitions->GetKey(transition)); |
- CHECK_EQ(*map2, transitions->GetTarget(transition)); |
- |
- DCHECK(transitions->IsSortedNoDuplicates()); |
-} |
- |
- |
-TEST(TransitionArray_FullFieldTransitions) { |
- CcTest::InitializeVM(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Isolate* isolate = CcTest::i_isolate(); |
- Factory* factory = isolate->factory(); |
- |
- Handle<String> name1 = factory->InternalizeUtf8String("foo"); |
- Handle<String> name2 = factory->InternalizeUtf8String("bar"); |
- PropertyAttributes attributes = NONE; |
- |
- Handle<Map> map0 = Map::Create(isolate, 0); |
- Handle<Map> map1 = |
- Map::CopyWithField(map0, name1, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- Handle<Map> map2 = |
- Map::CopyWithField(map0, name2, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- |
- CHECK(!map0->HasTransitionArray()); |
- Handle<TransitionArray> transitions = TransitionArray::Allocate(isolate, 0); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- int transition; |
- transitions = transitions->Insert(map0, name1, map1, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map1); |
- CHECK(transitions->IsFullTransitionArray()); |
- transition = transitions->Search(FIELD, *name1, attributes); |
- CHECK_EQ(*name1, transitions->GetKey(transition)); |
- CHECK_EQ(*map1, transitions->GetTarget(transition)); |
- |
- transitions = transitions->Insert(map0, name2, map2, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map2); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- transition = transitions->Search(FIELD, *name1, attributes); |
- CHECK_EQ(*name1, transitions->GetKey(transition)); |
- CHECK_EQ(*map1, transitions->GetTarget(transition)); |
- |
- transition = transitions->Search(FIELD, *name2, attributes); |
- CHECK_EQ(*name2, transitions->GetKey(transition)); |
- CHECK_EQ(*map2, transitions->GetTarget(transition)); |
- |
- DCHECK(transitions->IsSortedNoDuplicates()); |
-} |
- |
- |
-TEST(TransitionArray_DifferentFieldNames) { |
- CcTest::InitializeVM(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Isolate* isolate = CcTest::i_isolate(); |
- Factory* factory = isolate->factory(); |
- |
- const int PROPS_COUNT = 10; |
- Handle<String> names[PROPS_COUNT]; |
- Handle<Map> maps[PROPS_COUNT]; |
- PropertyAttributes attributes = NONE; |
- |
- Handle<Map> map0 = Map::Create(isolate, 0); |
- CHECK(!map0->HasTransitionArray()); |
- Handle<TransitionArray> transitions = TransitionArray::Allocate(isolate, 0); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- for (int i = 0; i < PROPS_COUNT; i++) { |
- EmbeddedVector<char, 64> buffer; |
- SNPrintF(buffer, "prop%d", i); |
- Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
- Handle<Map> map = |
- Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- names[i] = name; |
- maps[i] = map; |
- |
- transitions = transitions->Insert(map0, name, map, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map); |
- } |
- |
- for (int i = 0; i < PROPS_COUNT; i++) { |
- int transition = transitions->Search(FIELD, *names[i], attributes); |
- CHECK_EQ(*names[i], transitions->GetKey(transition)); |
- CHECK_EQ(*maps[i], transitions->GetTarget(transition)); |
- } |
- |
- DCHECK(transitions->IsSortedNoDuplicates()); |
-} |
- |
- |
-TEST(TransitionArray_SameFieldNamesDifferentAttributesSimple) { |
- CcTest::InitializeVM(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Isolate* isolate = CcTest::i_isolate(); |
- Factory* factory = isolate->factory(); |
- |
- Handle<Map> map0 = Map::Create(isolate, 0); |
- CHECK(!map0->HasTransitionArray()); |
- Handle<TransitionArray> transitions = TransitionArray::Allocate(isolate, 0); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; |
- STATIC_ASSERT(ATTRS_COUNT == 8); |
- Handle<Map> attr_maps[ATTRS_COUNT]; |
- Handle<String> name = factory->InternalizeUtf8String("foo"); |
- |
- // Add transitions for same field name but different attributes. |
- for (int i = 0; i < ATTRS_COUNT; i++) { |
- PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
- |
- Handle<Map> map = |
- Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- attr_maps[i] = map; |
- |
- transitions = transitions->Insert(map0, name, map, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map); |
- } |
- |
- // Ensure that transitions for |name| field are valid. |
- for (int i = 0; i < ATTRS_COUNT; i++) { |
- PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
- |
- int transition = transitions->Search(FIELD, *name, attributes); |
- CHECK_EQ(*name, transitions->GetKey(transition)); |
- CHECK_EQ(*attr_maps[i], transitions->GetTarget(transition)); |
- } |
- |
- DCHECK(transitions->IsSortedNoDuplicates()); |
-} |
- |
- |
-TEST(TransitionArray_SameFieldNamesDifferentAttributes) { |
- CcTest::InitializeVM(); |
- v8::HandleScope scope(CcTest::isolate()); |
- Isolate* isolate = CcTest::i_isolate(); |
- Factory* factory = isolate->factory(); |
- |
- const int PROPS_COUNT = 10; |
- Handle<String> names[PROPS_COUNT]; |
- Handle<Map> maps[PROPS_COUNT]; |
- |
- Handle<Map> map0 = Map::Create(isolate, 0); |
- CHECK(!map0->HasTransitionArray()); |
- Handle<TransitionArray> transitions = TransitionArray::Allocate(isolate, 0); |
- CHECK(transitions->IsFullTransitionArray()); |
- |
- // Some number of fields. |
- for (int i = 0; i < PROPS_COUNT; i++) { |
- EmbeddedVector<char, 64> buffer; |
- SNPrintF(buffer, "prop%d", i); |
- Handle<String> name = factory->InternalizeUtf8String(buffer.start()); |
- Handle<Map> map = |
- Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), NONE, |
- Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- names[i] = name; |
- maps[i] = map; |
- |
- transitions = transitions->Insert(map0, name, map, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map); |
- } |
- |
- const int ATTRS_COUNT = (READ_ONLY | DONT_ENUM | DONT_DELETE) + 1; |
- STATIC_ASSERT(ATTRS_COUNT == 8); |
- Handle<Map> attr_maps[ATTRS_COUNT]; |
- Handle<String> name = factory->InternalizeUtf8String("foo"); |
- |
- // Add transitions for same field name but different attributes. |
- for (int i = 0; i < ATTRS_COUNT; i++) { |
- PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
- |
- Handle<Map> map = |
- Map::CopyWithField(map0, name, handle(HeapType::Any(), isolate), |
- attributes, Representation::Tagged(), |
- OMIT_TRANSITION).ToHandleChecked(); |
- attr_maps[i] = map; |
- |
- transitions = transitions->Insert(map0, name, map, PROPERTY_TRANSITION); |
- ConnectTransition(map0, transitions, map); |
- } |
- |
- // Ensure that transitions for |name| field are valid. |
- for (int i = 0; i < ATTRS_COUNT; i++) { |
- PropertyAttributes attributes = static_cast<PropertyAttributes>(i); |
- |
- int transition = transitions->Search(FIELD, *name, attributes); |
- CHECK_EQ(*name, transitions->GetKey(transition)); |
- CHECK_EQ(*attr_maps[i], transitions->GetTarget(transition)); |
- } |
- |
- // Ensure that info about the other fields still valid. |
- for (int i = 0; i < PROPS_COUNT; i++) { |
- int transition = transitions->Search(FIELD, *names[i], NONE); |
- CHECK_EQ(*names[i], transitions->GetKey(transition)); |
- CHECK_EQ(*maps[i], transitions->GetTarget(transition)); |
- } |
- |
- DCHECK(transitions->IsSortedNoDuplicates()); |
-} |