108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// Copyright (c) 2010, Google Inc.
208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// All rights reserved.
308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//
408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// Redistribution and use in source and binary forms, with or without
508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// modification, are permitted provided that the following conditions are
608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// met:
708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//
808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//     * Redistributions of source code must retain the above copyright
908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// notice, this list of conditions and the following disclaimer.
1008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//     * Redistributions in binary form must reproduce the above
1108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// copyright notice, this list of conditions and the following disclaimer
1208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// in the documentation and/or other materials provided with the
1308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// distribution.
1408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//     * Neither the name of Google Inc. nor the names of its
1508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// contributors may be used to endorse or promote products derived from
1608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// this software without specific prior written permission.
1708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//
1808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
3008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// static_address_map_unittest.cc: Unit tests for StaticAddressMap.
3108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com//
3208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com// Author: Siyang Xie (lambxsy@google.com)
3308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
3408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <climits>
3508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <cstdlib>
3608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <ctime>
3708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <string>
3808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <iostream>
3908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include <sstream>
4008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
4108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include "breakpad_googletest_includes.h"
424e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#include "common/using_std_string.h"
4308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include "processor/address_map-inl.h"
4408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include "processor/static_address_map-inl.h"
4508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include "processor/simple_serializer-inl.h"
4608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com#include "map_serializers-inl.h"
4708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
4808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comtypedef google_breakpad::StaticAddressMap<int, char> TestMap;
494e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.comtypedef google_breakpad::AddressMap<int, string> AddrMap;
5008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
5108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comclass TestStaticAddressMap : public ::testing::Test {
5208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com protected:
5308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  void SetUp() {
5408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
5508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      testdata[testcase] = new int[testsize[testcase]];
5608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    }
5708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
5808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    // Test data set0: NULL (empty map)
5908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
6008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    // Test data set1: single element.
6108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    testdata[1][0] = 10;
6208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
6308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    // Test data set2: six elements.
6408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    const int tempdata[] = {5, 10, 14, 15, 16, 20};
6508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int i = 0; i < testsize[2]; ++i)
6608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      testdata[2][i] = tempdata[i];
6708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
6808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    // Test data set3:
6908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    srand(time(NULL));
7008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int i = 0; i < testsize[3]; ++i)
7108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      testdata[3][i] = rand();
7208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
7308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    // Setup maps.
7408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    std::stringstream sstream;
7508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int testcase = 0; testcase < kNumberTestCases; ++testcase) {
7608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
7708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com        sstream.clear();
7808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com        sstream << "test " << testdata[testcase][data_item];
7908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com        addr_map[testcase].Store(testdata[testcase][data_item], sstream.str());
8008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      }
8108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      map_data[testcase] = serializer.Serialize(addr_map[testcase], NULL);
8208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      test_map[testcase] = TestMap(map_data[testcase]);
8308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    }
8408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
8508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
8608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  void TearDown() {
8708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int i = 0; i < kNumberTestCases; ++i) {
884adb6f4f7b6e87801eac85aac721846a2293f2dfSiyangXie@gmail.com      delete [] map_data[i];
8908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      delete [] testdata[i];
9008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    }
9108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
9208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
9308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  void CompareRetrieveResult(int testcase, int target) {
9408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    int address;
9508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    int address_test;
964e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com    string entry;
974e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com    string entry_test;
9808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    const char *entry_cstring = NULL;
9908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    bool found;
10008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    bool found_test;
10108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
10208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    found = addr_map[testcase].Retrieve(target, &entry, &address);
10308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    found_test =
10408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com        test_map[testcase].Retrieve(target, entry_cstring, &address_test);
10508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
10608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    ASSERT_EQ(found, found_test);
10708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
10808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    if (found && found_test) {
10908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      ASSERT_EQ(address, address_test);
11008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      entry_test = entry_cstring;
11108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      ASSERT_EQ(entry, entry_test);
11208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    }
11308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
11408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
11508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  void RetrieveTester(int testcase) {
11608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    int target;
11708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = INT_MIN;
11808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
11908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = INT_MAX;
12008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
12108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
12208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    srand(time(0));
12308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
12408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // Retrive (aka, search) for target address and compare results from
12508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // AddressMap and StaticAddressMap.
12608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
12708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // First, assign the search target to be one of original testdata that is
12808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // known to exist in the map.
12908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      target = testdata[testcase][data_item];
13008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      CompareRetrieveResult(testcase, target);
13108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // Then, add +2 / -1 bias to target value, in order to test searching for
13208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // a target address not stored in the map.
13308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      target -= 1;
13408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      CompareRetrieveResult(testcase, target);
13508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      target += 3;
13608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      CompareRetrieveResult(testcase, target);
13708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      // Repeatedly test searching for random target addresses.
13808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      target = rand();
13908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com      CompareRetrieveResult(testcase, target);
14008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    }
14108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
14208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
14308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  // Test data sets:
14408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  static const int kNumberTestCases = 4;
14508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  static const int testsize[];
14608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int *testdata[kNumberTestCases];
14708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
14808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  AddrMap addr_map[kNumberTestCases];
14908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  TestMap test_map[kNumberTestCases];
15008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  char *map_data[kNumberTestCases];
1514e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com  google_breakpad::AddressMapSerializer<int, string> serializer;
15208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com};
15308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
15408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comconst int TestStaticAddressMap::testsize[] = {0, 1, 6, 1000};
15508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
15608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comTEST_F(TestStaticAddressMap, TestEmptyMap) {
15708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int testcase = 0;
15808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int target;
15908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MIN;
16008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
16108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MAX;
16208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
16308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
16408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = testdata[testcase][data_item];
16508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
16608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target -= 1;
16708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
16808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target += 3;
16908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
17008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = rand();
17108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
17208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
17308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com}
17408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
17508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comTEST_F(TestStaticAddressMap, TestOneElementMap) {
17608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int testcase = 1;
17708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int target;
17808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MIN;
17908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
18008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MAX;
18108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
18208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
18308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = testdata[testcase][data_item];
18408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
18508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target -= 1;
18608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
18708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target += 3;
18808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
18908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = rand();
19008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
19108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
19208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com}
19308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
19408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comTEST_F(TestStaticAddressMap, TestSixElementsMap) {
19508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int testcase = 2;
19608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int target;
19708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MIN;
19808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
19908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MAX;
20008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
20108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
20208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = testdata[testcase][data_item];
20308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
20408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target -= 1;
20508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
20608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target += 3;
20708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
20808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = rand();
20908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
21008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
21108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com}
21208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
21308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comTEST_F(TestStaticAddressMap, Test1000RandomElementsMap) {
21408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int testcase = 3;
21508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  int target;
21608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MIN;
21708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
21808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  target = INT_MAX;
21908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  CompareRetrieveResult(testcase, target);
22008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  for (int data_item = 0; data_item < testsize[testcase]; ++data_item) {
22108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = testdata[testcase][data_item];
22208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
22308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target -= 1;
22408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
22508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target += 3;
22608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
22708730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    target = rand();
22808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com    CompareRetrieveResult(testcase, target);
22908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  }
23008730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com}
23108730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
23208730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.comint main(int argc, char *argv[]) {
23308730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  ::testing::InitGoogleTest(&argc, argv);
23408730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com
23508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com  return RUN_ALL_TESTS();
23608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com}
237