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

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

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

Powered by Google App Engine
This is Rietveld 408576698