| Index: test/cctest/test-ordered-hash-table.cc
 | 
| diff --git a/test/cctest/test-ordered-hash-table.cc b/test/cctest/test-ordered-hash-table.cc
 | 
| index f6ebc16f1ef3467c4ea08751277aecb403153482..ba7a5348ed374077f09e60837d1490a420f8f40f 100644
 | 
| --- a/test/cctest/test-ordered-hash-table.cc
 | 
| +++ b/test/cctest/test-ordered-hash-table.cc
 | 
| @@ -36,7 +36,20 @@ namespace {
 | 
|  
 | 
|  using namespace v8::internal;
 | 
|  
 | 
| +
 | 
| +void CheckIterResultObject(Factory* factory,
 | 
| +                           Handle<JSObject> result,
 | 
| +                           Handle<Object> value,
 | 
| +                           bool done) {
 | 
| +  CHECK(GetProperty(result, "value").ToHandleChecked()->SameValue(*value));
 | 
| +  CHECK(GetProperty(result, "done").ToHandleChecked()->IsBoolean());
 | 
| +  CHECK_EQ(GetProperty(result, "done").ToHandleChecked()->BooleanValue(), done);
 | 
| +}
 | 
| +
 | 
| +
 | 
|  TEST(Set) {
 | 
| +  i::FLAG_harmony_collections = true;
 | 
| +
 | 
|    LocalContext context;
 | 
|    Isolate* isolate = CcTest::i_isolate();
 | 
|    Factory* factory = isolate->factory();
 | 
| @@ -46,6 +59,11 @@ TEST(Set) {
 | 
|    CHECK_EQ(0, ordered_set->NumberOfElements());
 | 
|    CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
 | 
|  
 | 
| +  Handle<JSSetIterator> value_iterator =
 | 
| +      OrderedHashSet::CreateIterator(ordered_set, JSSetIterator::kKindValues);
 | 
| +  Handle<JSSetIterator> value_iterator_2 =
 | 
| +      OrderedHashSet::CreateIterator(ordered_set, JSSetIterator::kKindValues);
 | 
| +
 | 
|    Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
 | 
|    Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
 | 
|    CHECK(!ordered_set->Contains(*obj));
 | 
| @@ -68,6 +86,18 @@ TEST(Set) {
 | 
|    CHECK(ordered_set->Contains(*obj2));
 | 
|    CHECK(ordered_set->Contains(*obj3));
 | 
|  
 | 
| +  // Test iteration
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator), obj1, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator), obj2, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator), obj3, false);
 | 
| +  CheckIterResultObject(factory,
 | 
| +                        JSSetIterator::Next(value_iterator),
 | 
| +                        factory->undefined_value(),
 | 
| +                        true);
 | 
| +
 | 
|    // Test growth
 | 
|    ordered_set = OrderedHashSet::Add(ordered_set, obj);
 | 
|    Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
 | 
| @@ -81,6 +111,22 @@ TEST(Set) {
 | 
|    CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
 | 
|    CHECK_EQ(4, ordered_set->NumberOfBuckets());
 | 
|  
 | 
| +  // Test iteration after growth
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator_2), obj1, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator_2), obj2, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator_2), obj3, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator_2), obj, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSSetIterator::Next(value_iterator_2), obj4, false);
 | 
| +  CheckIterResultObject(factory,
 | 
| +                        JSSetIterator::Next(value_iterator_2),
 | 
| +                        factory->undefined_value(),
 | 
| +                        true);
 | 
| +
 | 
|    // Test shrinking
 | 
|    ordered_set = OrderedHashSet::Remove(ordered_set, obj);
 | 
|    ordered_set = OrderedHashSet::Remove(ordered_set, obj1);
 | 
| @@ -92,6 +138,8 @@ TEST(Set) {
 | 
|  
 | 
|  
 | 
|  TEST(Map) {
 | 
| +  i::FLAG_harmony_collections = true;
 | 
| +
 | 
|    LocalContext context;
 | 
|    Isolate* isolate = CcTest::i_isolate();
 | 
|    Factory* factory = isolate->factory();
 | 
| @@ -101,6 +149,11 @@ TEST(Map) {
 | 
|    CHECK_EQ(0, ordered_map->NumberOfElements());
 | 
|    CHECK_EQ(0, ordered_map->NumberOfDeletedElements());
 | 
|  
 | 
| +  Handle<JSMapIterator> value_iterator =
 | 
| +      OrderedHashMap::CreateIterator(ordered_map, JSMapIterator::kKindValues);
 | 
| +  Handle<JSMapIterator> key_iterator =
 | 
| +      OrderedHashMap::CreateIterator(ordered_map, JSMapIterator::kKindKeys);
 | 
| +
 | 
|    Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize);
 | 
|    Handle<JSObject> obj = factory->NewJSObjectFromMap(map);
 | 
|    Handle<JSObject> val = factory->NewJSObjectFromMap(map);
 | 
| @@ -128,6 +181,18 @@ TEST(Map) {
 | 
|    CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
 | 
|    CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
 | 
|  
 | 
| +  // Test iteration
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(value_iterator), val1, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(value_iterator), val2, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(value_iterator), val3, false);
 | 
| +  CheckIterResultObject(factory,
 | 
| +                        JSMapIterator::Next(value_iterator),
 | 
| +                        factory->undefined_value(),
 | 
| +                        true);
 | 
| +
 | 
|    // Test growth
 | 
|    ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
 | 
|    Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
 | 
| @@ -141,6 +206,22 @@ TEST(Map) {
 | 
|    CHECK_EQ(5, ordered_map->NumberOfElements());
 | 
|    CHECK_EQ(4, ordered_map->NumberOfBuckets());
 | 
|  
 | 
| +  // Test iteration after growth
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(key_iterator), obj1, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(key_iterator), obj2, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(key_iterator), obj3, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(key_iterator), obj, false);
 | 
| +  CheckIterResultObject(
 | 
| +      factory, JSMapIterator::Next(key_iterator), obj4, false);
 | 
| +  CheckIterResultObject(factory,
 | 
| +                        JSMapIterator::Next(key_iterator),
 | 
| +                        factory->undefined_value(),
 | 
| +                        true);
 | 
| +
 | 
|    // Test shrinking
 | 
|    ordered_map = OrderedHashMap::Put(
 | 
|        ordered_map, obj, factory->the_hole_value());
 | 
| 
 |