1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Use of this source code is governed by a BSD-style license 5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * that can be found in the LICENSE file in the root of the source 6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * tree. An additional intellectual property rights grant can be found 7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * in the file PATENTS. All contributing project authors may 8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * be found in the AUTHORS file in the root of the source tree. 9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "gtest/gtest.h" 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 13e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "map_wrapper.h" 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentusing ::webrtc::MapWrapper; 16e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentusing ::webrtc::MapItem; 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 18c55a96383497a772a307b346368133960b02ad03Eric Laurentconst int kNumberOfElements = 10; 19e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint* ItemPointer(MapItem* item) { 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (item == NULL) { 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return NULL; 23e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return reinterpret_cast<int*>(item->GetItem()); 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool DeleteItemContent(MapItem* item) { 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(item == NULL) { 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int* value_ptr = ItemPointer(item); 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent delete value_ptr; 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return true; 34e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint ItemValue(MapItem* item) { 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (item == NULL) { 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int* value_ptr = ItemPointer(item); 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (value_ptr == 0) { 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return *value_ptr; 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid PrintToConsole(const char* message, bool supress) { 48e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (supress) { 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return; 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 51c55a96383497a772a307b346368133960b02ad03Eric Laurent printf("%s", message); 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool CreateAscendingMap(MapWrapper* ascending_map) { 55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int* insert_value = NULL; 56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent for (int i = 0; i < kNumberOfElements; ++i) { 57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent insert_value = new int; 58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (insert_value == NULL) { 59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent *insert_value = i; 62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (0 != ascending_map->Insert( 63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent i, 64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent reinterpret_cast<void*>(insert_value))) { 65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return true; 69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool ClearMap(MapWrapper* clear_map) { 72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent bool success = true; 73e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (clear_map->Size() != 0) { 74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* remove_item = clear_map->First(); 75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (remove_item == NULL) { 76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!DeleteItemContent(remove_item)) { 79e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent success = false; 80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 81e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (clear_map->Erase(remove_item) != 0) { 82e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 83e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 84e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 85e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return success; 86e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 87e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 88e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentvoid PrintMapItem(MapItem* item, bool supress) { 89e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int id = item->GetId(); 90e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int value = ItemValue(item); 91e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent char print_buffer[16]; 92e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent sprintf(print_buffer, "(%3i,%3i) ", id, value); 93e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintToConsole(print_buffer, supress); 94e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 95e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 96e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Succeeds only if all the items were printed. 97e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool PrintMap(const MapWrapper& print_map, bool supress) { 98e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int elements_to_print = print_map.Size(); 99e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int elements_printed = 0; 100e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* item = print_map.First(); 101e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintToConsole("[", supress); 102e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (item != NULL) { 103e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintMapItem(item, supress); 104e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++elements_printed; 105e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item = print_map.Next(item); 106e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 107e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintToConsole("]\n", supress); 108e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return elements_printed == elements_to_print; 109e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 110e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 111e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Succeeds only if all the items were printed. 112e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool ReversePrintMap(const MapWrapper& print_map, bool supress) { 113e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int elements_to_print = print_map.Size(); 114e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int elements_printed = 0; 115e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* item = print_map.Last(); 116e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintToConsole("[", supress); 117e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (item != NULL) { 118e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintMapItem(item, supress); 119e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++elements_printed; 120e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent item = print_map.Previous(item); 121e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 122e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent PrintToConsole("]\n", supress); 123e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return elements_printed == elements_to_print; 124e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 125e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 126e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Returns true if the map items contain the same item. 127e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool CompareItems(MapItem* lhs_item, MapItem* rhs_item) { 128e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if ((lhs_item == NULL) || (rhs_item == NULL)) { 129e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 130e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 131e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (lhs_item->GetId() != rhs_item->GetId()) { 132e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 133e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 134e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return lhs_item->GetItem() == rhs_item->GetItem(); 135e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 136e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 137e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent// Returns true if the map contains the same items. 138e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentbool CompareMaps(const MapWrapper& lhs, const MapWrapper& rhs) { 139e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int map_size = lhs.Size(); 140e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (map_size != rhs.Size()) { 141e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 142e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 143e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int item_count = 0; 144e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* lhs_item = lhs.First(); 145e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (lhs_item != NULL) { 146e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* rhs_item = rhs.Find(lhs_item->GetId()); 147e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (rhs_item == NULL) { 148e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 149e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 150e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (!CompareItems(lhs_item, rhs_item)) { 151e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 152e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 153e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++item_count; 154e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent lhs_item = lhs.Next(lhs_item); 155e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 156e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return item_count == map_size; 157e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 158e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 159e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentclass MapWrapperTest : public ::testing::Test { 160e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentprotected: 161e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual void SetUp() { 162e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_TRUE(CreateAscendingMap(&ascending_map_)); 163e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 164e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 165e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent virtual void TearDown() { 166e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(ClearMap(&ascending_map_)); 167e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 168e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapWrapper ascending_map_; 169e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent}; 170e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 171e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentTEST_F(MapWrapperTest,RemoveTest) { 172e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Erase using int id 173e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { // Create local scope to avoid accidental re-use 174e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* item_first = ascending_map_.First(); 175e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_FALSE(item_first == NULL); 176e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int first_value_id = item_first->GetId(); 177e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int first_value = ItemValue(item_first); 178e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(first_value == 0); 179e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_EQ(first_value_id,first_value); 180e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_FALSE(NULL == ascending_map_.Find(first_value_id)); 181e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(DeleteItemContent(item_first)); 182e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ascending_map_.Erase(first_value_id); 183e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(NULL == ascending_map_.Find(first_value_id)); 184e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_EQ(kNumberOfElements-1,ascending_map_.Size()); 185e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 186e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 187e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Erase using MapItem* item 188e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* item_last = ascending_map_.Last(); 189e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_FALSE(item_last == NULL); 190e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int last_value_id = item_last->GetId(); 191e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int last_value = ItemValue(item_last); 192e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(last_value == kNumberOfElements - 1); 193e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_EQ(last_value_id, last_value); 194e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_FALSE(NULL == ascending_map_.Find(last_value_id)); 195e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(DeleteItemContent(item_last)); 196e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ascending_map_.Erase(last_value_id); 197e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(NULL == ascending_map_.Find(last_value_id)); 198e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_EQ(kNumberOfElements-2,ascending_map_.Size()); 199e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 200e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 201e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentTEST_F(MapWrapperTest, PrintTest) { 202e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const bool supress = true; // Don't spam the console 203e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 204e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(PrintMap(ascending_map_, supress)); 205e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(ReversePrintMap(ascending_map_, supress)); 206e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 207e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 208e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentTEST_F(MapWrapperTest, CopyTest) { 209e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapWrapper compare_map; 210e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_TRUE(CreateAscendingMap(&compare_map)); 211e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent const int map_size = compare_map.Size(); 212e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_EQ(ascending_map_.Size(), map_size); 213e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // CompareMaps compare the pointers not value of the pointers. 214e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // (the values are the same since both are ascending maps). 215e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_FALSE(CompareMaps(compare_map,ascending_map_)); 216e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 217e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent int copy_count = 0; 218e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* ascend_item = ascending_map_.First(); 219e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (ascend_item != NULL) { 220e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MapItem* compare_item = compare_map.Find(ascend_item->GetId()); 221e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ASSERT_FALSE(compare_item == NULL); 222e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent DeleteItemContent(compare_item); 223e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent compare_item->SetItem(ascend_item->GetItem()); 224e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ascend_item = ascending_map_.Next(ascend_item); 225e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent ++copy_count; 226e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 227e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_TRUE(CompareMaps(compare_map,ascending_map_)); 228e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent while (compare_map.Erase(compare_map.First()) == 0) { 229e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 230e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent EXPECT_EQ(map_size, copy_count); 231e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 232