/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <stdio.h>
#include <stdlib.h>
#include "map_wrapper.h"
const int kNumberOfElements = 10;
void FailTest(bool failed)
{
if (failed)
{
printf("Test failed!\n");
printf("Press enter to continue:");
getchar();
exit(0);
}
}
int GetStoredIntegerValue(MapItem* map_item)
{
void* map_item_pointer = map_item->GetItem();
if (map_item_pointer != NULL)
{
return *(reinterpret_cast<int*>(map_item_pointer));
}
return static_cast<int>(map_item->GetUnsignedId());
}
void PrintMap(MapWrapper& map)
{
MapItem* map_item = map.First();
printf("Map: ");
while (map_item != NULL)
{
int item_value = GetStoredIntegerValue(map_item);
FailTest(item_value < 0);
printf(" %d",item_value);
map_item = map.Next(map_item);
}
printf("\n");
}
int main(int /*argc*/, char* /*argv*/[])
{
int element_array[kNumberOfElements];
for (int i = 0; i < kNumberOfElements; i++)
{
element_array[i] = i;
}
// Test insert
MapWrapper test_map;
for (int i = 0; i < kNumberOfElements; i++)
{
test_map.Insert(i,(void*)&element_array[i]);
}
// Test Erase1
MapItem* remove_item = test_map.Find(2);
FailTest(remove_item == NULL);
FailTest(test_map.Erase(remove_item) != 0);
FailTest(test_map.Find(2) != NULL);
remove_item = NULL;
FailTest(test_map.Erase(remove_item) != -1);
// Test Erase2
FailTest(test_map.Erase(1) != 0);
FailTest(test_map.Find(1) != NULL);
FailTest(test_map.Erase(1) != -1);
// Test Size
FailTest(test_map.Size() != kNumberOfElements - 2);
PrintMap(test_map);
// Test First
MapItem* first_item = test_map.First();
FailTest(first_item == NULL);
FailTest(GetStoredIntegerValue(first_item) != 0);
// Test Last
MapItem* last_item = test_map.Last();
FailTest(last_item == NULL);
FailTest(GetStoredIntegerValue(last_item) != 9);
// Test Next
MapItem* second_item = test_map.Next(first_item);
FailTest(second_item == NULL);
FailTest(GetStoredIntegerValue(second_item) != 3);
FailTest(test_map.Next(last_item) != NULL);
// Test Previous
MapItem* second_to_last_item = test_map.Previous(last_item);
FailTest(second_to_last_item == NULL);
FailTest(GetStoredIntegerValue(second_to_last_item) != 8);
FailTest(test_map.Previous(first_item) != NULL);
// Test Find (only improper usage untested)
FailTest(test_map.Find(kNumberOfElements + 2) != NULL);
// Test GetId
FailTest(*(reinterpret_cast<int*>(second_to_last_item->GetItem())) !=
second_to_last_item->GetId());
FailTest(second_to_last_item->GetUnsignedId() !=
static_cast<unsigned int>(second_to_last_item->GetId()));
// Test SetItem
int swapped_item = kNumberOfElements;
last_item->SetItem(reinterpret_cast<void*>(&swapped_item));
FailTest(GetStoredIntegerValue(last_item) !=
swapped_item);
printf("Tests passed successfully!\n");
}