Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Side by Side Diff: test/cctest/test-ordered-hash-table.cc

Issue 236143002: ES6: Add support for Map.prototype.forEach and Set.prototype.forEach (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 18 matching lines...) Expand all
29 29
30 #include "v8.h" 30 #include "v8.h"
31 31
32 #include "cctest.h" 32 #include "cctest.h"
33 #include "factory.h" 33 #include "factory.h"
34 34
35 namespace { 35 namespace {
36 36
37 using namespace v8::internal; 37 using namespace v8::internal;
38 38
39
40 void CheckIterResultObject(Factory* factory,
41 Handle<JSObject> result,
42 Handle<Object> value,
43 bool done) {
44 CHECK(GetProperty(result, "value").ToHandleChecked()->SameValue(*value));
45 CHECK(GetProperty(result, "done").ToHandleChecked()->IsBoolean());
46 CHECK_EQ(GetProperty(result, "done").ToHandleChecked()->BooleanValue(), done);
47 }
48
49
39 TEST(Set) { 50 TEST(Set) {
51 i::FLAG_harmony_collections = true;
52
40 LocalContext context; 53 LocalContext context;
41 Isolate* isolate = CcTest::i_isolate(); 54 Isolate* isolate = CcTest::i_isolate();
42 Factory* factory = isolate->factory(); 55 Factory* factory = isolate->factory();
43 HandleScope scope(isolate); 56 HandleScope scope(isolate);
44 Handle<OrderedHashSet> ordered_set = factory->NewOrderedHashSet(); 57 Handle<OrderedHashSet> ordered_set = factory->NewOrderedHashSet();
45 CHECK_EQ(2, ordered_set->NumberOfBuckets()); 58 CHECK_EQ(2, ordered_set->NumberOfBuckets());
46 CHECK_EQ(0, ordered_set->NumberOfElements()); 59 CHECK_EQ(0, ordered_set->NumberOfElements());
47 CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 60 CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
48 61
62 Handle<JSSetIterator> value_iterator =
63 ordered_set->CreateIterator(JSMapIterator::kKindValues);
64 Handle<JSSetIterator> value_iterator_2 =
65 ordered_set->CreateIterator(JSMapIterator::kKindValues);
66
49 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 67 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
50 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 68 Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
51 CHECK(!ordered_set->Contains(*obj)); 69 CHECK(!ordered_set->Contains(*obj));
52 ordered_set = OrderedHashSet::Add(ordered_set, obj); 70 ordered_set = OrderedHashSet::Add(ordered_set, obj);
53 CHECK_EQ(1, ordered_set->NumberOfElements()); 71 CHECK_EQ(1, ordered_set->NumberOfElements());
54 CHECK(ordered_set->Contains(*obj)); 72 CHECK(ordered_set->Contains(*obj));
55 ordered_set = OrderedHashSet::Remove(ordered_set, obj); 73 ordered_set = OrderedHashSet::Remove(ordered_set, obj);
56 CHECK_EQ(0, ordered_set->NumberOfElements()); 74 CHECK_EQ(0, ordered_set->NumberOfElements());
57 CHECK(!ordered_set->Contains(*obj)); 75 CHECK(!ordered_set->Contains(*obj));
58 76
59 // Test for collisions/chaining 77 // Test for collisions/chaining
60 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 78 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map);
61 ordered_set = OrderedHashSet::Add(ordered_set, obj1); 79 ordered_set = OrderedHashSet::Add(ordered_set, obj1);
62 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 80 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map);
63 ordered_set = OrderedHashSet::Add(ordered_set, obj2); 81 ordered_set = OrderedHashSet::Add(ordered_set, obj2);
64 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 82 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map);
65 ordered_set = OrderedHashSet::Add(ordered_set, obj3); 83 ordered_set = OrderedHashSet::Add(ordered_set, obj3);
66 CHECK_EQ(3, ordered_set->NumberOfElements()); 84 CHECK_EQ(3, ordered_set->NumberOfElements());
67 CHECK(ordered_set->Contains(*obj1)); 85 CHECK(ordered_set->Contains(*obj1));
68 CHECK(ordered_set->Contains(*obj2)); 86 CHECK(ordered_set->Contains(*obj2));
69 CHECK(ordered_set->Contains(*obj3)); 87 CHECK(ordered_set->Contains(*obj3));
70 88
89 // Test iteration
90 CheckIterResultObject(factory, value_iterator->Next(), obj1, false);
91 CheckIterResultObject(factory, value_iterator->Next(), obj2, false);
92 CheckIterResultObject(factory, value_iterator->Next(), obj3, false);
93 CheckIterResultObject(
94 factory, value_iterator->Next(), factory->undefined_value(), true);
95
71 // Test growth 96 // Test growth
72 ordered_set = OrderedHashSet::Add(ordered_set, obj); 97 ordered_set = OrderedHashSet::Add(ordered_set, obj);
73 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 98 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
74 ordered_set = OrderedHashSet::Add(ordered_set, obj4); 99 ordered_set = OrderedHashSet::Add(ordered_set, obj4);
75 CHECK(ordered_set->Contains(*obj)); 100 CHECK(ordered_set->Contains(*obj));
76 CHECK(ordered_set->Contains(*obj1)); 101 CHECK(ordered_set->Contains(*obj1));
77 CHECK(ordered_set->Contains(*obj2)); 102 CHECK(ordered_set->Contains(*obj2));
78 CHECK(ordered_set->Contains(*obj3)); 103 CHECK(ordered_set->Contains(*obj3));
79 CHECK(ordered_set->Contains(*obj4)); 104 CHECK(ordered_set->Contains(*obj4));
80 CHECK_EQ(5, ordered_set->NumberOfElements()); 105 CHECK_EQ(5, ordered_set->NumberOfElements());
81 CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 106 CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
82 CHECK_EQ(4, ordered_set->NumberOfBuckets()); 107 CHECK_EQ(4, ordered_set->NumberOfBuckets());
83 108
109 // Test iteration after growth
110 CheckIterResultObject(factory, value_iterator_2->Next(), obj1, false);
111 CheckIterResultObject(factory, value_iterator_2->Next(), obj2, false);
112 CheckIterResultObject(factory, value_iterator_2->Next(), obj3, false);
113 CheckIterResultObject(factory, value_iterator_2->Next(), obj, false);
114 CheckIterResultObject(factory, value_iterator_2->Next(), obj4, false);
115 CheckIterResultObject(
116 factory, value_iterator_2->Next(), factory->undefined_value(), true);
117
84 // Test shrinking 118 // Test shrinking
85 ordered_set = OrderedHashSet::Remove(ordered_set, obj); 119 ordered_set = OrderedHashSet::Remove(ordered_set, obj);
86 ordered_set = OrderedHashSet::Remove(ordered_set, obj1); 120 ordered_set = OrderedHashSet::Remove(ordered_set, obj1);
87 ordered_set = OrderedHashSet::Remove(ordered_set, obj2); 121 ordered_set = OrderedHashSet::Remove(ordered_set, obj2);
88 ordered_set = OrderedHashSet::Remove(ordered_set, obj3); 122 ordered_set = OrderedHashSet::Remove(ordered_set, obj3);
89 CHECK_EQ(1, ordered_set->NumberOfElements()); 123 CHECK_EQ(1, ordered_set->NumberOfElements());
90 CHECK_EQ(2, ordered_set->NumberOfBuckets()); 124 CHECK_EQ(2, ordered_set->NumberOfBuckets());
91 } 125 }
92 126
93 127
94 TEST(Map) { 128 TEST(Map) {
129 i::FLAG_harmony_collections = true;
130
95 LocalContext context; 131 LocalContext context;
96 Isolate* isolate = CcTest::i_isolate(); 132 Isolate* isolate = CcTest::i_isolate();
97 Factory* factory = isolate->factory(); 133 Factory* factory = isolate->factory();
98 HandleScope scope(isolate); 134 HandleScope scope(isolate);
99 Handle<OrderedHashMap> ordered_map = factory->NewOrderedHashMap(); 135 Handle<OrderedHashMap> ordered_map = factory->NewOrderedHashMap();
100 CHECK_EQ(2, ordered_map->NumberOfBuckets()); 136 CHECK_EQ(2, ordered_map->NumberOfBuckets());
101 CHECK_EQ(0, ordered_map->NumberOfElements()); 137 CHECK_EQ(0, ordered_map->NumberOfElements());
102 CHECK_EQ(0, ordered_map->NumberOfDeletedElements()); 138 CHECK_EQ(0, ordered_map->NumberOfDeletedElements());
103 139
140 Handle<JSMapIterator> value_iterator =
141 ordered_map->CreateIterator(JSMapIterator::kKindValues);
142 Handle<JSMapIterator> key_iterator =
143 ordered_map->CreateIterator(JSMapIterator::kKindKeys);
144
104 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 145 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
105 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 146 Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
106 Handle<JSObject> val = factory->NewJSObjectFromMap(map); 147 Handle<JSObject> val = factory->NewJSObjectFromMap(map);
107 CHECK(ordered_map->Lookup(*obj)->IsTheHole()); 148 CHECK(ordered_map->Lookup(*obj)->IsTheHole());
108 ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 149 ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
109 CHECK_EQ(1, ordered_map->NumberOfElements()); 150 CHECK_EQ(1, ordered_map->NumberOfElements());
110 CHECK(ordered_map->Lookup(*obj)->SameValue(*val)); 151 CHECK(ordered_map->Lookup(*obj)->SameValue(*val));
111 ordered_map = OrderedHashMap::Put( 152 ordered_map = OrderedHashMap::Put(
112 ordered_map, obj, factory->the_hole_value()); 153 ordered_map, obj, factory->the_hole_value());
113 CHECK_EQ(0, ordered_map->NumberOfElements()); 154 CHECK_EQ(0, ordered_map->NumberOfElements());
114 CHECK(ordered_map->Lookup(*obj)->IsTheHole()); 155 CHECK(ordered_map->Lookup(*obj)->IsTheHole());
115 156
116 // Test for collisions/chaining 157 // Test for collisions/chaining
117 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 158 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map);
118 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 159 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map);
119 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 160 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map);
120 Handle<JSObject> val1 = factory->NewJSObjectFromMap(map); 161 Handle<JSObject> val1 = factory->NewJSObjectFromMap(map);
121 Handle<JSObject> val2 = factory->NewJSObjectFromMap(map); 162 Handle<JSObject> val2 = factory->NewJSObjectFromMap(map);
122 Handle<JSObject> val3 = factory->NewJSObjectFromMap(map); 163 Handle<JSObject> val3 = factory->NewJSObjectFromMap(map);
123 ordered_map = OrderedHashMap::Put(ordered_map, obj1, val1); 164 ordered_map = OrderedHashMap::Put(ordered_map, obj1, val1);
124 ordered_map = OrderedHashMap::Put(ordered_map, obj2, val2); 165 ordered_map = OrderedHashMap::Put(ordered_map, obj2, val2);
125 ordered_map = OrderedHashMap::Put(ordered_map, obj3, val3); 166 ordered_map = OrderedHashMap::Put(ordered_map, obj3, val3);
126 CHECK_EQ(3, ordered_map->NumberOfElements()); 167 CHECK_EQ(3, ordered_map->NumberOfElements());
127 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1)); 168 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1));
128 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2)); 169 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
129 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3)); 170 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
130 171
172 // Test iteration
173 CheckIterResultObject(factory, value_iterator->Next(), val1, false);
174 CheckIterResultObject(factory, value_iterator->Next(), val2, false);
175 CheckIterResultObject(factory, value_iterator->Next(), val3, false);
176 CheckIterResultObject(
177 factory, value_iterator->Next(), factory->undefined_value(), true);
178
131 // Test growth 179 // Test growth
132 ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 180 ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
133 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 181 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
134 Handle<JSObject> val4 = factory->NewJSObjectFromMap(map); 182 Handle<JSObject> val4 = factory->NewJSObjectFromMap(map);
135 ordered_map = OrderedHashMap::Put(ordered_map, obj4, val4); 183 ordered_map = OrderedHashMap::Put(ordered_map, obj4, val4);
136 CHECK(ordered_map->Lookup(*obj)->SameValue(*val)); 184 CHECK(ordered_map->Lookup(*obj)->SameValue(*val));
137 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1)); 185 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1));
138 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2)); 186 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
139 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3)); 187 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
140 CHECK(ordered_map->Lookup(*obj4)->SameValue(*val4)); 188 CHECK(ordered_map->Lookup(*obj4)->SameValue(*val4));
141 CHECK_EQ(5, ordered_map->NumberOfElements()); 189 CHECK_EQ(5, ordered_map->NumberOfElements());
142 CHECK_EQ(4, ordered_map->NumberOfBuckets()); 190 CHECK_EQ(4, ordered_map->NumberOfBuckets());
143 191
192 // Test iteration after growth
193 CheckIterResultObject(factory, key_iterator->Next(), obj1, false);
194 CheckIterResultObject(factory, key_iterator->Next(), obj2, false);
195 CheckIterResultObject(factory, key_iterator->Next(), obj3, false);
196 CheckIterResultObject(factory, key_iterator->Next(), obj, false);
197 CheckIterResultObject(factory, key_iterator->Next(), obj4, false);
198 CheckIterResultObject(
199 factory, key_iterator->Next(), factory->undefined_value(), true);
200
144 // Test shrinking 201 // Test shrinking
145 ordered_map = OrderedHashMap::Put( 202 ordered_map = OrderedHashMap::Put(
146 ordered_map, obj, factory->the_hole_value()); 203 ordered_map, obj, factory->the_hole_value());
147 ordered_map = OrderedHashMap::Put( 204 ordered_map = OrderedHashMap::Put(
148 ordered_map, obj1, factory->the_hole_value()); 205 ordered_map, obj1, factory->the_hole_value());
149 ordered_map = OrderedHashMap::Put( 206 ordered_map = OrderedHashMap::Put(
150 ordered_map, obj2, factory->the_hole_value()); 207 ordered_map, obj2, factory->the_hole_value());
151 ordered_map = OrderedHashMap::Put( 208 ordered_map = OrderedHashMap::Put(
152 ordered_map, obj3, factory->the_hole_value()); 209 ordered_map, obj3, factory->the_hole_value());
153 CHECK_EQ(1, ordered_map->NumberOfElements()); 210 CHECK_EQ(1, ordered_map->NumberOfElements());
154 CHECK_EQ(2, ordered_map->NumberOfBuckets()); 211 CHECK_EQ(2, ordered_map->NumberOfBuckets());
155 } 212 }
156 213
157 214
158 } 215 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698