OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include <string> | |
6 #include <utility> | |
7 #include <vector> | |
8 #include "chrome/common/instant_restricted_id_cache.h" | |
9 #include "testing/gtest/include/gtest/gtest.h" | |
10 | |
11 namespace { | |
12 | |
13 struct TestData { | |
14 TestData() { } | |
dhollowa
2013/03/06 02:12:58
nit: {}
Shishir
2013/03/11 21:07:24
Done.
| |
15 explicit TestData(const std::string& i_value) : value(i_value) { } | |
dhollowa
2013/03/06 02:12:58
nit: {}
Shishir
2013/03/11 21:07:24
Done.
| |
16 | |
17 bool operator==(const TestData& rhs) const { | |
dhollowa
2013/03/06 02:12:58
Is this a requirement for any T? If so, this shou
Shishir
2013/03/11 21:07:24
Documented.
| |
18 return rhs.value == value; | |
19 } | |
20 | |
21 std::string value; | |
22 }; | |
23 | |
24 } // namespace | |
25 | |
26 class InstantRestrictedIdCacheTest : public testing::Test { | |
dhollowa
2013/03/06 02:12:58
I usually just use a typedef in these simple cases
Shishir
2013/03/11 21:07:24
Done.
| |
27 }; | |
28 | |
29 TEST_F(InstantRestrictedIdCacheTest, AddAndFetchTest) { | |
30 InstantRestrictedIdCache<TestData> cache(7); | |
31 | |
32 EXPECT_EQ(0u, cache.cache_.size()); | |
33 EXPECT_EQ(0u, cache.results_base_); | |
34 EXPECT_EQ(0u, cache.last_addition_size_); | |
35 | |
36 // Check first addition. | |
37 std::vector<TestData> input1; | |
38 input1.push_back(TestData("A")); | |
39 input1.push_back(TestData("B")); | |
40 input1.push_back(TestData("C")); | |
41 cache.AddItems(input1); | |
42 EXPECT_EQ(3u, cache.cache_.size()); | |
43 EXPECT_EQ(0u, cache.results_base_); | |
44 EXPECT_EQ(3u, cache.last_addition_size_); | |
45 | |
46 std::vector<std::pair<size_t, TestData> > output; | |
47 cache.GetCurrentItems(&output); | |
48 EXPECT_EQ(3u, output.size()); | |
49 for (size_t i = 0; i < 3; ++i) { | |
50 EXPECT_EQ(i, output[i].first); | |
51 EXPECT_EQ(input1[i], output[i].second); | |
52 } | |
53 | |
54 TestData t; | |
55 EXPECT_FALSE(cache.GetItemWithRestrictedId(3, &t)); | |
56 EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); | |
57 EXPECT_EQ(input1[2], t); | |
58 | |
59 // Add more items, no overflow. | |
60 std::vector<TestData> input2; | |
61 input2.push_back(TestData("D")); | |
62 input2.push_back(TestData("E")); | |
63 cache.AddItems(input2); | |
64 EXPECT_EQ(5u, cache.cache_.size()); | |
65 EXPECT_EQ(0u, cache.results_base_); | |
66 EXPECT_EQ(2u, cache.last_addition_size_); | |
67 | |
68 output.clear(); | |
69 cache.GetCurrentItems(&output); | |
70 EXPECT_EQ(2u, output.size()); | |
71 for (size_t i = 0; i < 2; ++i) { | |
72 EXPECT_EQ(i + 3, output[i].first); | |
73 EXPECT_EQ(input2[i], output[i].second); | |
74 } | |
75 | |
76 EXPECT_FALSE(cache.GetItemWithRestrictedId(5, &t)); | |
77 EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); | |
78 EXPECT_EQ(input1[2], t); | |
79 EXPECT_TRUE(cache.GetItemWithRestrictedId(4, &t)); | |
80 EXPECT_EQ(input2[1], t); | |
81 | |
82 // Add another set, overflows. | |
83 std::vector<TestData> input3; | |
84 input3.push_back(TestData("F")); | |
85 input3.push_back(TestData("G")); | |
86 input3.push_back(TestData("H")); | |
87 input3.push_back(TestData("I")); | |
88 cache.AddItems(input3); | |
89 EXPECT_EQ(7u, cache.cache_.size()); | |
90 EXPECT_EQ(2u, cache.results_base_); | |
91 EXPECT_EQ(4u, cache.last_addition_size_); | |
92 | |
93 output.clear(); | |
94 cache.GetCurrentItems(&output); | |
95 EXPECT_EQ(4u, output.size()); | |
96 for (size_t i = 0; i < 2; ++i) { | |
97 EXPECT_EQ(i + 5, output[i].first); | |
98 EXPECT_EQ(input3[i], output[i].second); | |
99 } | |
100 | |
101 EXPECT_FALSE(cache.GetItemWithRestrictedId(0, &t)); | |
102 EXPECT_FALSE(cache.GetItemWithRestrictedId(1, &t)); | |
103 EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); | |
104 EXPECT_EQ(input1[2], t); | |
105 EXPECT_TRUE(cache.GetItemWithRestrictedId(4, &t)); | |
106 EXPECT_EQ(input2[1], t); | |
107 EXPECT_TRUE(cache.GetItemWithRestrictedId(6, &t)); | |
108 EXPECT_EQ(input3[1], t); | |
109 | |
110 cache.Reset(); | |
111 EXPECT_EQ(0u, cache.cache_.size()); | |
112 EXPECT_EQ(0u, cache.results_base_); | |
113 EXPECT_EQ(0u, cache.last_addition_size_); | |
114 } | |
dhollowa
2013/03/06 02:12:58
nit: extra line
Shishir
2013/03/11 21:07:24
Done.
| |
115 TEST_F(InstantRestrictedIdCacheTest, EdgeCasesTest) { | |
116 InstantRestrictedIdCache<TestData> cache(2); | |
117 | |
118 EXPECT_EQ(0u, cache.cache_.size()); | |
119 EXPECT_EQ(0u, cache.results_base_); | |
120 EXPECT_EQ(0u, cache.last_addition_size_); | |
121 | |
122 // Add too many. | |
123 std::vector<TestData> input1; | |
124 input1.push_back(TestData("A")); | |
125 input1.push_back(TestData("B")); | |
126 input1.push_back(TestData("C")); | |
127 cache.AddItems(input1); | |
128 EXPECT_EQ(2u, cache.cache_.size()); | |
129 EXPECT_EQ(1u, cache.results_base_); | |
130 EXPECT_EQ(3u, cache.last_addition_size_); | |
131 | |
132 std::vector<std::pair<size_t, TestData> > output; | |
133 cache.GetCurrentItems(&output); | |
134 EXPECT_EQ(2u, output.size()); | |
135 for (size_t i = 0; i < 2; ++i) { | |
136 EXPECT_EQ(i + 1, output[i].first); | |
137 EXPECT_EQ(input1[i + 1], output[i].second); | |
138 } | |
139 | |
140 TestData t; | |
141 EXPECT_FALSE(cache.GetItemWithRestrictedId(0, &t)); | |
142 EXPECT_FALSE(cache.GetItemWithRestrictedId(3, &t)); | |
143 EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); | |
144 EXPECT_EQ(input1[2], t); | |
145 } | |
OLD | NEW |