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

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

Issue 238973011: Revert "ES6: Add support for Map/Set forEach" (Closed) Base URL: https://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
« no previous file with comments | « src/x64/full-codegen-x64.cc ('k') | test/mjsunit/harmony/collections.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(Isolate* isolate,
41 Handle<JSObject> result,
42 Handle<Object> value,
43 bool done) {
44 CHECK(Object::GetProperty(isolate, result, "value").ToHandleChecked()
45 ->SameValue(*value));
46 CHECK(Object::GetProperty(isolate, result, "done").ToHandleChecked()
47 ->IsBoolean());
48 CHECK_EQ(Object::GetProperty(isolate, result, "done").ToHandleChecked()
49 ->BooleanValue(), done);
50 }
51
52
53 TEST(Set) { 39 TEST(Set) {
54 i::FLAG_harmony_collections = true;
55
56 LocalContext context; 40 LocalContext context;
57 Isolate* isolate = CcTest::i_isolate(); 41 Isolate* isolate = CcTest::i_isolate();
58 Factory* factory = isolate->factory(); 42 Factory* factory = isolate->factory();
59 HandleScope scope(isolate); 43 HandleScope scope(isolate);
60 Handle<OrderedHashSet> ordered_set = factory->NewOrderedHashSet(); 44 Handle<OrderedHashSet> ordered_set = factory->NewOrderedHashSet();
61 CHECK_EQ(2, ordered_set->NumberOfBuckets()); 45 CHECK_EQ(2, ordered_set->NumberOfBuckets());
62 CHECK_EQ(0, ordered_set->NumberOfElements()); 46 CHECK_EQ(0, ordered_set->NumberOfElements());
63 CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 47 CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
64 48
65 Handle<JSSetIterator> value_iterator =
66 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues);
67 Handle<JSSetIterator> value_iterator_2 =
68 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues);
69
70 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 49 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
71 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 50 Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
72 CHECK(!ordered_set->Contains(*obj)); 51 CHECK(!ordered_set->Contains(*obj));
73 ordered_set = OrderedHashSet::Add(ordered_set, obj); 52 ordered_set = OrderedHashSet::Add(ordered_set, obj);
74 CHECK_EQ(1, ordered_set->NumberOfElements()); 53 CHECK_EQ(1, ordered_set->NumberOfElements());
75 CHECK(ordered_set->Contains(*obj)); 54 CHECK(ordered_set->Contains(*obj));
76 ordered_set = OrderedHashSet::Remove(ordered_set, obj); 55 ordered_set = OrderedHashSet::Remove(ordered_set, obj);
77 CHECK_EQ(0, ordered_set->NumberOfElements()); 56 CHECK_EQ(0, ordered_set->NumberOfElements());
78 CHECK(!ordered_set->Contains(*obj)); 57 CHECK(!ordered_set->Contains(*obj));
79 58
80 // Test for collisions/chaining 59 // Test for collisions/chaining
81 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 60 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map);
82 ordered_set = OrderedHashSet::Add(ordered_set, obj1); 61 ordered_set = OrderedHashSet::Add(ordered_set, obj1);
83 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 62 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map);
84 ordered_set = OrderedHashSet::Add(ordered_set, obj2); 63 ordered_set = OrderedHashSet::Add(ordered_set, obj2);
85 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 64 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map);
86 ordered_set = OrderedHashSet::Add(ordered_set, obj3); 65 ordered_set = OrderedHashSet::Add(ordered_set, obj3);
87 CHECK_EQ(3, ordered_set->NumberOfElements()); 66 CHECK_EQ(3, ordered_set->NumberOfElements());
88 CHECK(ordered_set->Contains(*obj1)); 67 CHECK(ordered_set->Contains(*obj1));
89 CHECK(ordered_set->Contains(*obj2)); 68 CHECK(ordered_set->Contains(*obj2));
90 CHECK(ordered_set->Contains(*obj3)); 69 CHECK(ordered_set->Contains(*obj3));
91 70
92 // Test iteration
93 CheckIterResultObject(
94 isolate, JSSetIterator::Next(value_iterator), obj1, false);
95 CheckIterResultObject(
96 isolate, JSSetIterator::Next(value_iterator), obj2, false);
97 CheckIterResultObject(
98 isolate, JSSetIterator::Next(value_iterator), obj3, false);
99 CheckIterResultObject(isolate,
100 JSSetIterator::Next(value_iterator),
101 factory->undefined_value(),
102 true);
103
104 // Test growth 71 // Test growth
105 ordered_set = OrderedHashSet::Add(ordered_set, obj); 72 ordered_set = OrderedHashSet::Add(ordered_set, obj);
106 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 73 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
107 ordered_set = OrderedHashSet::Add(ordered_set, obj4); 74 ordered_set = OrderedHashSet::Add(ordered_set, obj4);
108 CHECK(ordered_set->Contains(*obj)); 75 CHECK(ordered_set->Contains(*obj));
109 CHECK(ordered_set->Contains(*obj1)); 76 CHECK(ordered_set->Contains(*obj1));
110 CHECK(ordered_set->Contains(*obj2)); 77 CHECK(ordered_set->Contains(*obj2));
111 CHECK(ordered_set->Contains(*obj3)); 78 CHECK(ordered_set->Contains(*obj3));
112 CHECK(ordered_set->Contains(*obj4)); 79 CHECK(ordered_set->Contains(*obj4));
113 CHECK_EQ(5, ordered_set->NumberOfElements()); 80 CHECK_EQ(5, ordered_set->NumberOfElements());
114 CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 81 CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
115 CHECK_EQ(4, ordered_set->NumberOfBuckets()); 82 CHECK_EQ(4, ordered_set->NumberOfBuckets());
116 83
117 // Test iteration after growth
118 CheckIterResultObject(
119 isolate, JSSetIterator::Next(value_iterator_2), obj1, false);
120 CheckIterResultObject(
121 isolate, JSSetIterator::Next(value_iterator_2), obj2, false);
122 CheckIterResultObject(
123 isolate, JSSetIterator::Next(value_iterator_2), obj3, false);
124 CheckIterResultObject(
125 isolate, JSSetIterator::Next(value_iterator_2), obj, false);
126 CheckIterResultObject(
127 isolate, JSSetIterator::Next(value_iterator_2), obj4, false);
128 CheckIterResultObject(isolate,
129 JSSetIterator::Next(value_iterator_2),
130 factory->undefined_value(),
131 true);
132
133 // Test shrinking 84 // Test shrinking
134 ordered_set = OrderedHashSet::Remove(ordered_set, obj); 85 ordered_set = OrderedHashSet::Remove(ordered_set, obj);
135 ordered_set = OrderedHashSet::Remove(ordered_set, obj1); 86 ordered_set = OrderedHashSet::Remove(ordered_set, obj1);
136 ordered_set = OrderedHashSet::Remove(ordered_set, obj2); 87 ordered_set = OrderedHashSet::Remove(ordered_set, obj2);
137 ordered_set = OrderedHashSet::Remove(ordered_set, obj3); 88 ordered_set = OrderedHashSet::Remove(ordered_set, obj3);
138 CHECK_EQ(1, ordered_set->NumberOfElements()); 89 CHECK_EQ(1, ordered_set->NumberOfElements());
139 CHECK_EQ(2, ordered_set->NumberOfBuckets()); 90 CHECK_EQ(2, ordered_set->NumberOfBuckets());
140 } 91 }
141 92
142 93
143 TEST(Map) { 94 TEST(Map) {
144 i::FLAG_harmony_collections = true;
145
146 LocalContext context; 95 LocalContext context;
147 Isolate* isolate = CcTest::i_isolate(); 96 Isolate* isolate = CcTest::i_isolate();
148 Factory* factory = isolate->factory(); 97 Factory* factory = isolate->factory();
149 HandleScope scope(isolate); 98 HandleScope scope(isolate);
150 Handle<OrderedHashMap> ordered_map = factory->NewOrderedHashMap(); 99 Handle<OrderedHashMap> ordered_map = factory->NewOrderedHashMap();
151 CHECK_EQ(2, ordered_map->NumberOfBuckets()); 100 CHECK_EQ(2, ordered_map->NumberOfBuckets());
152 CHECK_EQ(0, ordered_map->NumberOfElements()); 101 CHECK_EQ(0, ordered_map->NumberOfElements());
153 CHECK_EQ(0, ordered_map->NumberOfDeletedElements()); 102 CHECK_EQ(0, ordered_map->NumberOfDeletedElements());
154 103
155 Handle<JSMapIterator> value_iterator =
156 JSMapIterator::Create(ordered_map, JSMapIterator::kKindValues);
157 Handle<JSMapIterator> key_iterator =
158 JSMapIterator::Create(ordered_map, JSMapIterator::kKindKeys);
159
160 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 104 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
161 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 105 Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
162 Handle<JSObject> val = factory->NewJSObjectFromMap(map); 106 Handle<JSObject> val = factory->NewJSObjectFromMap(map);
163 CHECK(ordered_map->Lookup(*obj)->IsTheHole()); 107 CHECK(ordered_map->Lookup(*obj)->IsTheHole());
164 ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 108 ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
165 CHECK_EQ(1, ordered_map->NumberOfElements()); 109 CHECK_EQ(1, ordered_map->NumberOfElements());
166 CHECK(ordered_map->Lookup(*obj)->SameValue(*val)); 110 CHECK(ordered_map->Lookup(*obj)->SameValue(*val));
167 ordered_map = OrderedHashMap::Put( 111 ordered_map = OrderedHashMap::Put(
168 ordered_map, obj, factory->the_hole_value()); 112 ordered_map, obj, factory->the_hole_value());
169 CHECK_EQ(0, ordered_map->NumberOfElements()); 113 CHECK_EQ(0, ordered_map->NumberOfElements());
170 CHECK(ordered_map->Lookup(*obj)->IsTheHole()); 114 CHECK(ordered_map->Lookup(*obj)->IsTheHole());
171 115
172 // Test for collisions/chaining 116 // Test for collisions/chaining
173 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 117 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map);
174 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 118 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map);
175 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 119 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map);
176 Handle<JSObject> val1 = factory->NewJSObjectFromMap(map); 120 Handle<JSObject> val1 = factory->NewJSObjectFromMap(map);
177 Handle<JSObject> val2 = factory->NewJSObjectFromMap(map); 121 Handle<JSObject> val2 = factory->NewJSObjectFromMap(map);
178 Handle<JSObject> val3 = factory->NewJSObjectFromMap(map); 122 Handle<JSObject> val3 = factory->NewJSObjectFromMap(map);
179 ordered_map = OrderedHashMap::Put(ordered_map, obj1, val1); 123 ordered_map = OrderedHashMap::Put(ordered_map, obj1, val1);
180 ordered_map = OrderedHashMap::Put(ordered_map, obj2, val2); 124 ordered_map = OrderedHashMap::Put(ordered_map, obj2, val2);
181 ordered_map = OrderedHashMap::Put(ordered_map, obj3, val3); 125 ordered_map = OrderedHashMap::Put(ordered_map, obj3, val3);
182 CHECK_EQ(3, ordered_map->NumberOfElements()); 126 CHECK_EQ(3, ordered_map->NumberOfElements());
183 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1)); 127 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1));
184 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2)); 128 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
185 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3)); 129 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
186 130
187 // Test iteration
188 CheckIterResultObject(
189 isolate, JSMapIterator::Next(value_iterator), val1, false);
190 CheckIterResultObject(
191 isolate, JSMapIterator::Next(value_iterator), val2, false);
192 CheckIterResultObject(
193 isolate, JSMapIterator::Next(value_iterator), val3, false);
194 CheckIterResultObject(isolate,
195 JSMapIterator::Next(value_iterator),
196 factory->undefined_value(),
197 true);
198
199 // Test growth 131 // Test growth
200 ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 132 ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
201 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 133 Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
202 Handle<JSObject> val4 = factory->NewJSObjectFromMap(map); 134 Handle<JSObject> val4 = factory->NewJSObjectFromMap(map);
203 ordered_map = OrderedHashMap::Put(ordered_map, obj4, val4); 135 ordered_map = OrderedHashMap::Put(ordered_map, obj4, val4);
204 CHECK(ordered_map->Lookup(*obj)->SameValue(*val)); 136 CHECK(ordered_map->Lookup(*obj)->SameValue(*val));
205 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1)); 137 CHECK(ordered_map->Lookup(*obj1)->SameValue(*val1));
206 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2)); 138 CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
207 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3)); 139 CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
208 CHECK(ordered_map->Lookup(*obj4)->SameValue(*val4)); 140 CHECK(ordered_map->Lookup(*obj4)->SameValue(*val4));
209 CHECK_EQ(5, ordered_map->NumberOfElements()); 141 CHECK_EQ(5, ordered_map->NumberOfElements());
210 CHECK_EQ(4, ordered_map->NumberOfBuckets()); 142 CHECK_EQ(4, ordered_map->NumberOfBuckets());
211 143
212 // Test iteration after growth
213 CheckIterResultObject(
214 isolate, JSMapIterator::Next(key_iterator), obj1, false);
215 CheckIterResultObject(
216 isolate, JSMapIterator::Next(key_iterator), obj2, false);
217 CheckIterResultObject(
218 isolate, JSMapIterator::Next(key_iterator), obj3, false);
219 CheckIterResultObject(
220 isolate, JSMapIterator::Next(key_iterator), obj, false);
221 CheckIterResultObject(
222 isolate, JSMapIterator::Next(key_iterator), obj4, false);
223 CheckIterResultObject(isolate,
224 JSMapIterator::Next(key_iterator),
225 factory->undefined_value(),
226 true);
227
228 // Test shrinking 144 // Test shrinking
229 ordered_map = OrderedHashMap::Put( 145 ordered_map = OrderedHashMap::Put(
230 ordered_map, obj, factory->the_hole_value()); 146 ordered_map, obj, factory->the_hole_value());
231 ordered_map = OrderedHashMap::Put( 147 ordered_map = OrderedHashMap::Put(
232 ordered_map, obj1, factory->the_hole_value()); 148 ordered_map, obj1, factory->the_hole_value());
233 ordered_map = OrderedHashMap::Put( 149 ordered_map = OrderedHashMap::Put(
234 ordered_map, obj2, factory->the_hole_value()); 150 ordered_map, obj2, factory->the_hole_value());
235 ordered_map = OrderedHashMap::Put( 151 ordered_map = OrderedHashMap::Put(
236 ordered_map, obj3, factory->the_hole_value()); 152 ordered_map, obj3, factory->the_hole_value());
237 CHECK_EQ(1, ordered_map->NumberOfElements()); 153 CHECK_EQ(1, ordered_map->NumberOfElements());
238 CHECK_EQ(2, ordered_map->NumberOfBuckets()); 154 CHECK_EQ(2, ordered_map->NumberOfBuckets());
239 } 155 }
240 156
241 157
242 } 158 }
OLDNEW
« no previous file with comments | « src/x64/full-codegen-x64.cc ('k') | test/mjsunit/harmony/collections.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698