xref: /aosp_15_r20/external/libchrome/base/containers/hash_tables_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/containers/hash_tables.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <stdint.h>
8*635a8641SAndroid Build Coastguard Worker #include <string>
9*635a8641SAndroid Build Coastguard Worker 
10*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*635a8641SAndroid Build Coastguard Worker 
12*635a8641SAndroid Build Coastguard Worker namespace {
13*635a8641SAndroid Build Coastguard Worker 
14*635a8641SAndroid Build Coastguard Worker class HashPairTest : public testing::Test {
15*635a8641SAndroid Build Coastguard Worker };
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker #define INSERT_PAIR_TEST(Type, value1, value2) \
18*635a8641SAndroid Build Coastguard Worker   { \
19*635a8641SAndroid Build Coastguard Worker     Type pair(value1, value2); \
20*635a8641SAndroid Build Coastguard Worker     base::hash_map<Type, int> map; \
21*635a8641SAndroid Build Coastguard Worker     map[pair] = 1; \
22*635a8641SAndroid Build Coastguard Worker   }
23*635a8641SAndroid Build Coastguard Worker 
24*635a8641SAndroid Build Coastguard Worker // Verify that a hash_map can be constructed for pairs of integers of various
25*635a8641SAndroid Build Coastguard Worker // sizes.
TEST_F(HashPairTest,IntegerPairs)26*635a8641SAndroid Build Coastguard Worker TEST_F(HashPairTest, IntegerPairs) {
27*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int16_t, int16_t> Int16Int16Pair;
28*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int16_t, int32_t> Int16Int32Pair;
29*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int16_t, int64_t> Int16Int64Pair;
30*635a8641SAndroid Build Coastguard Worker 
31*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int16Int16Pair, 4, 6);
32*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int16Int32Pair, 9, (1 << 29) + 378128932);
33*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int16Int64Pair, 10,
34*635a8641SAndroid Build Coastguard Worker                    (INT64_C(1) << 60) + INT64_C(78931732321));
35*635a8641SAndroid Build Coastguard Worker 
36*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int32_t, int16_t> Int32Int16Pair;
37*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int32_t, int32_t> Int32Int32Pair;
38*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int32_t, int64_t> Int32Int64Pair;
39*635a8641SAndroid Build Coastguard Worker 
40*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int32Int16Pair, 4, 6);
41*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int32Int32Pair, 9, (1 << 29) + 378128932);
42*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int32Int64Pair, 10,
43*635a8641SAndroid Build Coastguard Worker                    (INT64_C(1) << 60) + INT64_C(78931732321));
44*635a8641SAndroid Build Coastguard Worker 
45*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int64_t, int16_t> Int64Int16Pair;
46*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int64_t, int32_t> Int64Int32Pair;
47*635a8641SAndroid Build Coastguard Worker   typedef std::pair<int64_t, int64_t> Int64Int64Pair;
48*635a8641SAndroid Build Coastguard Worker 
49*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int64Int16Pair, 4, 6);
50*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int64Int32Pair, 9, (1 << 29) + 378128932);
51*635a8641SAndroid Build Coastguard Worker   INSERT_PAIR_TEST(Int64Int64Pair, 10,
52*635a8641SAndroid Build Coastguard Worker                    (INT64_C(1) << 60) + INT64_C(78931732321));
53*635a8641SAndroid Build Coastguard Worker }
54*635a8641SAndroid Build Coastguard Worker 
55*635a8641SAndroid Build Coastguard Worker // Verify that base::hash_set<const char*> compares by pointer value, not as C
56*635a8641SAndroid Build Coastguard Worker // strings.
TEST(HashTableTest,CharPointers)57*635a8641SAndroid Build Coastguard Worker TEST(HashTableTest, CharPointers) {
58*635a8641SAndroid Build Coastguard Worker   std::string str1("hello");
59*635a8641SAndroid Build Coastguard Worker   std::string str2("hello");
60*635a8641SAndroid Build Coastguard Worker   base::hash_set<const char*> set;
61*635a8641SAndroid Build Coastguard Worker 
62*635a8641SAndroid Build Coastguard Worker   set.insert(str1.c_str());
63*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(1u, set.count(str1.c_str()));
64*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0u, set.count(str2.c_str()));
65*635a8641SAndroid Build Coastguard Worker }
66*635a8641SAndroid Build Coastguard Worker 
67*635a8641SAndroid Build Coastguard Worker }  // namespace
68