OLD | NEW |
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 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues); | 68 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues); |
69 Handle<JSSetIterator> value_iterator_2 = | 69 Handle<JSSetIterator> value_iterator_2 = |
70 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues); | 70 JSSetIterator::Create(ordered_set, JSSetIterator::kKindValues); |
71 | 71 |
72 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); | 72 Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); |
73 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); | 73 Handle<JSObject> obj = factory->NewJSObjectFromMap(map); |
74 CHECK(!ordered_set->Contains(obj)); | 74 CHECK(!ordered_set->Contains(obj)); |
75 ordered_set = OrderedHashSet::Add(ordered_set, obj); | 75 ordered_set = OrderedHashSet::Add(ordered_set, obj); |
76 CHECK_EQ(1, ordered_set->NumberOfElements()); | 76 CHECK_EQ(1, ordered_set->NumberOfElements()); |
77 CHECK(ordered_set->Contains(obj)); | 77 CHECK(ordered_set->Contains(obj)); |
78 ordered_set = OrderedHashSet::Remove(ordered_set, obj); | 78 bool was_present = false; |
| 79 ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); |
| 80 CHECK(was_present); |
79 CHECK_EQ(0, ordered_set->NumberOfElements()); | 81 CHECK_EQ(0, ordered_set->NumberOfElements()); |
80 CHECK(!ordered_set->Contains(obj)); | 82 CHECK(!ordered_set->Contains(obj)); |
81 | 83 |
| 84 // Removing a not-present object should set was_present to false. |
| 85 ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); |
| 86 CHECK(!was_present); |
| 87 |
82 // Test for collisions/chaining | 88 // Test for collisions/chaining |
83 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); | 89 Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); |
84 ordered_set = OrderedHashSet::Add(ordered_set, obj1); | 90 ordered_set = OrderedHashSet::Add(ordered_set, obj1); |
85 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); | 91 Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); |
86 ordered_set = OrderedHashSet::Add(ordered_set, obj2); | 92 ordered_set = OrderedHashSet::Add(ordered_set, obj2); |
87 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); | 93 Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); |
88 ordered_set = OrderedHashSet::Add(ordered_set, obj3); | 94 ordered_set = OrderedHashSet::Add(ordered_set, obj3); |
89 CHECK_EQ(3, ordered_set->NumberOfElements()); | 95 CHECK_EQ(3, ordered_set->NumberOfElements()); |
90 CHECK(ordered_set->Contains(obj1)); | 96 CHECK(ordered_set->Contains(obj1)); |
91 CHECK(ordered_set->Contains(obj2)); | 97 CHECK(ordered_set->Contains(obj2)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 CheckIterResultObject( | 132 CheckIterResultObject( |
127 isolate, JSSetIterator::Next(value_iterator_2), obj, false); | 133 isolate, JSSetIterator::Next(value_iterator_2), obj, false); |
128 CheckIterResultObject( | 134 CheckIterResultObject( |
129 isolate, JSSetIterator::Next(value_iterator_2), obj4, false); | 135 isolate, JSSetIterator::Next(value_iterator_2), obj4, false); |
130 CheckIterResultObject(isolate, | 136 CheckIterResultObject(isolate, |
131 JSSetIterator::Next(value_iterator_2), | 137 JSSetIterator::Next(value_iterator_2), |
132 factory->undefined_value(), | 138 factory->undefined_value(), |
133 true); | 139 true); |
134 | 140 |
135 // Test shrinking | 141 // Test shrinking |
136 ordered_set = OrderedHashSet::Remove(ordered_set, obj); | 142 ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); |
137 ordered_set = OrderedHashSet::Remove(ordered_set, obj1); | 143 CHECK(was_present); |
138 ordered_set = OrderedHashSet::Remove(ordered_set, obj2); | 144 ordered_set = OrderedHashSet::Remove(ordered_set, obj1, &was_present); |
139 ordered_set = OrderedHashSet::Remove(ordered_set, obj3); | 145 CHECK(was_present); |
| 146 ordered_set = OrderedHashSet::Remove(ordered_set, obj2, &was_present); |
| 147 CHECK(was_present); |
| 148 ordered_set = OrderedHashSet::Remove(ordered_set, obj3, &was_present); |
| 149 CHECK(was_present); |
140 CHECK_EQ(1, ordered_set->NumberOfElements()); | 150 CHECK_EQ(1, ordered_set->NumberOfElements()); |
141 CHECK_EQ(2, ordered_set->NumberOfBuckets()); | 151 CHECK_EQ(2, ordered_set->NumberOfBuckets()); |
142 } | 152 } |
143 | 153 |
144 | 154 |
145 TEST(Map) { | 155 TEST(Map) { |
146 i::FLAG_harmony_collections = true; | 156 i::FLAG_harmony_collections = true; |
147 | 157 |
148 LocalContext context; | 158 LocalContext context; |
149 Isolate* isolate = CcTest::i_isolate(); | 159 Isolate* isolate = CcTest::i_isolate(); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 ordered_map = OrderedHashMap::Put( | 245 ordered_map = OrderedHashMap::Put( |
236 ordered_map, obj2, factory->the_hole_value()); | 246 ordered_map, obj2, factory->the_hole_value()); |
237 ordered_map = OrderedHashMap::Put( | 247 ordered_map = OrderedHashMap::Put( |
238 ordered_map, obj3, factory->the_hole_value()); | 248 ordered_map, obj3, factory->the_hole_value()); |
239 CHECK_EQ(1, ordered_map->NumberOfElements()); | 249 CHECK_EQ(1, ordered_map->NumberOfElements()); |
240 CHECK_EQ(2, ordered_map->NumberOfBuckets()); | 250 CHECK_EQ(2, ordered_map->NumberOfBuckets()); |
241 } | 251 } |
242 | 252 |
243 | 253 |
244 } | 254 } |
OLD | NEW |