18f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 28f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// Redistribution and use in source and binary forms, with or without 38f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// modification, are permitted provided that the following conditions are 48f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// met: 58f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// 68f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// * Redistributions of source code must retain the above copyright 78f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// notice, this list of conditions and the following disclaimer. 88f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// * Redistributions in binary form must reproduce the above 98f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// copyright notice, this list of conditions and the following 108f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// disclaimer in the documentation and/or other materials provided 118f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// with the distribution. 128f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// * Neither the name of Google Inc. nor the names of its 138f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// contributors may be used to endorse or promote products derived 148f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// from this software without specific prior written permission. 158f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// 168f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 178f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 188f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 198f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 208f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 218f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 228f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 238f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 248f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 268f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 288f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org#include <stdlib.h> 298f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 318f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 32196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/factory.h" 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h" 348f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 358f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.orgnamespace { 368f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 378f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.orgusing namespace v8::internal; 388f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 394ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 408f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.orgTEST(Set) { 418f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org LocalContext context; 428f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 438f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Factory* factory = isolate->factory(); 448f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org HandleScope scope(isolate); 458f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<OrderedHashSet> ordered_set = factory->NewOrderedHashSet(); 468f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(2, ordered_set->NumberOfBuckets()); 478f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_set->NumberOfElements()); 488f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 498f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 508f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 518f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 523484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(!ordered_set->Contains(obj)); 538f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj); 548f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(1, ordered_set->NumberOfElements()); 553484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj)); 5679d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org bool was_present = false; 5779d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); 5879d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(was_present); 598f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_set->NumberOfElements()); 603484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(!ordered_set->Contains(obj)); 618f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 6279d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org // Removing a not-present object should set was_present to false. 6379d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); 6479d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(!was_present); 6579d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org 668f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test for collisions/chaining 678f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 688f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj1); 698f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 708f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj2); 718f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 728f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj3); 738f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(3, ordered_set->NumberOfElements()); 743484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj1)); 753484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj2)); 763484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj3)); 778f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 788f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test growth 798f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj); 808f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 818f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_set = OrderedHashSet::Add(ordered_set, obj4); 823484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj)); 833484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj1)); 843484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj2)); 853484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj3)); 863484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_set->Contains(obj4)); 878f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(5, ordered_set->NumberOfElements()); 888f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_set->NumberOfDeletedElements()); 898f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(4, ordered_set->NumberOfBuckets()); 908f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 918f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test shrinking 9279d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj, &was_present); 9379d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(was_present); 9479d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj1, &was_present); 9579d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(was_present); 9679d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj2, &was_present); 9779d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(was_present); 9879d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org ordered_set = OrderedHashSet::Remove(ordered_set, obj3, &was_present); 9979d0704c4f2ed07d3b30ee08ea1e1af79e521bd2machenbach@chromium.org CHECK(was_present); 1008f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(1, ordered_set->NumberOfElements()); 1018f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(2, ordered_set->NumberOfBuckets()); 1028f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org} 1038f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1048f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1058f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.orgTEST(Map) { 1068f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org LocalContext context; 1078f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 1088f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Factory* factory = isolate->factory(); 1098f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org HandleScope scope(isolate); 1108f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<OrderedHashMap> ordered_map = factory->NewOrderedHashMap(); 1118f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(2, ordered_map->NumberOfBuckets()); 1128f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_map->NumberOfElements()); 1138f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_map->NumberOfDeletedElements()); 1148f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1158f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<Map> map = factory->NewMap(JS_OBJECT_TYPE, JSObject::kHeaderSize); 1168f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj = factory->NewJSObjectFromMap(map); 1178f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> val = factory->NewJSObjectFromMap(map); 1183484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_map->Lookup(obj)->IsTheHole()); 1198f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 1208f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(1, ordered_map->NumberOfElements()); 121a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org Object* lookup = ordered_map->Lookup(obj); 122a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val)); 123196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org bool was_present = false; 124196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ordered_map = OrderedHashMap::Remove(ordered_map, obj, &was_present); 125196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CHECK(was_present); 1268f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(0, ordered_map->NumberOfElements()); 1273484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org CHECK(ordered_map->Lookup(obj)->IsTheHole()); 1288f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1298f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test for collisions/chaining 1308f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj1 = factory->NewJSObjectFromMap(map); 1318f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj2 = factory->NewJSObjectFromMap(map); 1328f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj3 = factory->NewJSObjectFromMap(map); 1338f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> val1 = factory->NewJSObjectFromMap(map); 1348f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> val2 = factory->NewJSObjectFromMap(map); 1358f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> val3 = factory->NewJSObjectFromMap(map); 1368f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj1, val1); 1378f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj2, val2); 1388f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj3, val3); 1398f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(3, ordered_map->NumberOfElements()); 140a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj1); 141a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val1)); 142a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj2); 143a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val2)); 144a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj3); 145a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val3)); 1468f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1478f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test growth 1488f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj, val); 1498f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> obj4 = factory->NewJSObjectFromMap(map); 1508f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org Handle<JSObject> val4 = factory->NewJSObjectFromMap(map); 1518f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org ordered_map = OrderedHashMap::Put(ordered_map, obj4, val4); 152a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj); 153a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val)); 154a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj1); 155a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val1)); 156a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj2); 157a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val2)); 158a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj3); 159a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val3)); 160a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org lookup = ordered_map->Lookup(obj4); 161a8702c210b949f35c64d8e4aa01bb6d525086c85machenbach@chromium.org CHECK(lookup->SameValue(*val4)); 1628f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(5, ordered_map->NumberOfElements()); 1638f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(4, ordered_map->NumberOfBuckets()); 1648f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1658f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org // Test shrinking 166196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ordered_map = OrderedHashMap::Remove(ordered_map, obj, &was_present); 167196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CHECK(was_present); 168196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ordered_map = OrderedHashMap::Remove(ordered_map, obj1, &was_present); 169196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CHECK(was_present); 170196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ordered_map = OrderedHashMap::Remove(ordered_map, obj2, &was_present); 171196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CHECK(was_present); 172196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ordered_map = OrderedHashMap::Remove(ordered_map, obj3, &was_present); 173196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CHECK(was_present); 1748f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(1, ordered_map->NumberOfElements()); 1758f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org CHECK_EQ(2, ordered_map->NumberOfBuckets()); 1768f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org} 1778f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1788f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 1798f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org} 180