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

Unified 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 side-by-side diff with in-line comments
Download patch
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..8ed8dc9a97d5c504fe05c6dee73c2dd966c1b732 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 =
+ ordered_set->CreateIterator(JSMapIterator::kKindValues);
+ Handle<JSSetIterator> value_iterator_2 =
+ ordered_set->CreateIterator(JSMapIterator::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,13 @@ TEST(Set) {
CHECK(ordered_set->Contains(*obj2));
CHECK(ordered_set->Contains(*obj3));
+ // Test iteration
+ CheckIterResultObject(factory, value_iterator->Next(), obj1, false);
+ CheckIterResultObject(factory, value_iterator->Next(), obj2, false);
+ CheckIterResultObject(factory, value_iterator->Next(), obj3, false);
+ CheckIterResultObject(
+ factory, value_iterator->Next(), factory->undefined_value(), true);
+
// Test growth
ordered_set = OrderedHashSet::Add(ordered_set, obj);
Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
@@ -81,6 +106,15 @@ TEST(Set) {
CHECK_EQ(0, ordered_set->NumberOfDeletedElements());
CHECK_EQ(4, ordered_set->NumberOfBuckets());
+ // Test iteration after growth
+ CheckIterResultObject(factory, value_iterator_2->Next(), obj1, false);
+ CheckIterResultObject(factory, value_iterator_2->Next(), obj2, false);
+ CheckIterResultObject(factory, value_iterator_2->Next(), obj3, false);
+ CheckIterResultObject(factory, value_iterator_2->Next(), obj, false);
+ CheckIterResultObject(factory, value_iterator_2->Next(), obj4, false);
+ CheckIterResultObject(
+ factory, value_iterator_2->Next(), factory->undefined_value(), true);
+
// Test shrinking
ordered_set = OrderedHashSet::Remove(ordered_set, obj);
ordered_set = OrderedHashSet::Remove(ordered_set, obj1);
@@ -92,6 +126,8 @@ TEST(Set) {
TEST(Map) {
+ i::FLAG_harmony_collections = true;
+
LocalContext context;
Isolate* isolate = CcTest::i_isolate();
Factory* factory = isolate->factory();
@@ -101,6 +137,11 @@ TEST(Map) {
CHECK_EQ(0, ordered_map->NumberOfElements());
CHECK_EQ(0, ordered_map->NumberOfDeletedElements());
+ Handle<JSMapIterator> value_iterator =
+ ordered_map->CreateIterator(JSMapIterator::kKindValues);
+ Handle<JSMapIterator> key_iterator =
+ ordered_map->CreateIterator(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 +169,13 @@ TEST(Map) {
CHECK(ordered_map->Lookup(*obj2)->SameValue(*val2));
CHECK(ordered_map->Lookup(*obj3)->SameValue(*val3));
+ // Test iteration
+ CheckIterResultObject(factory, value_iterator->Next(), val1, false);
+ CheckIterResultObject(factory, value_iterator->Next(), val2, false);
+ CheckIterResultObject(factory, value_iterator->Next(), val3, false);
+ CheckIterResultObject(
+ factory, value_iterator->Next(), factory->undefined_value(), true);
+
// Test growth
ordered_map = OrderedHashMap::Put(ordered_map, obj, val);
Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map);
@@ -141,6 +189,15 @@ TEST(Map) {
CHECK_EQ(5, ordered_map->NumberOfElements());
CHECK_EQ(4, ordered_map->NumberOfBuckets());
+ // Test iteration after growth
+ CheckIterResultObject(factory, key_iterator->Next(), obj1, false);
+ CheckIterResultObject(factory, key_iterator->Next(), obj2, false);
+ CheckIterResultObject(factory, key_iterator->Next(), obj3, false);
+ CheckIterResultObject(factory, key_iterator->Next(), obj, false);
+ CheckIterResultObject(factory, key_iterator->Next(), obj4, false);
+ CheckIterResultObject(
+ factory, key_iterator->Next(), factory->undefined_value(), true);
+
// Test shrinking
ordered_map = OrderedHashMap::Put(
ordered_map, obj, factory->the_hole_value());

Powered by Google App Engine
This is Rietveld 408576698