Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(815)

Side by Side Diff: chrome/common/instant_restricted_id_cache_unittest.cc

Issue 12498002: InstantExtended: Adding InstantRestrictedIDCache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressing chris's and david's comments. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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() {}
15 explicit TestData(const std::string& i_value) : value(i_value) {}
16
17 bool operator==(const TestData& rhs) const {
18 return rhs.value == value;
19 }
20
21 std::string value;
22 };
23
24 } // namespace
25
26 typedef testing::Test InstantRestrictedIDCacheTest;
27 typedef InstantRestrictedIDCache<TestData>::ItemIDPair ItemIDPair;
28
29 TEST_F(InstantRestrictedIDCacheTest, AutoIDGeneration) {
30 InstantRestrictedIDCache<TestData> cache(7);
31 EXPECT_EQ(0u, cache.cache_.size());
32 EXPECT_EQ(0, cache.last_restricted_id_);
33 EXPECT_EQ(0u, cache.last_addition_size_);
34
35 // Check first addition.
36 std::vector<TestData> input1;
37 input1.push_back(TestData("A"));
38 input1.push_back(TestData("B"));
39 input1.push_back(TestData("C"));
40 cache.AddItems(input1);
41 EXPECT_EQ(3u, cache.cache_.size());
42 EXPECT_EQ(3, cache.last_restricted_id_);
43 EXPECT_EQ(3u, cache.last_addition_size_);
44
45 std::vector<ItemIDPair> output;
46 cache.GetCurrentItems(&output);
47 EXPECT_EQ(3u, output.size());
48 for (int64 i = 0; i < 3; ++i) {
49 EXPECT_EQ(i + 1, output[i].first);
50 EXPECT_EQ(input1[i], output[i].second);
51 }
52
53 TestData t;
54 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
55 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
56 EXPECT_EQ(input1[2], t);
57
58 // Add more items, no overflow.
59 std::vector<TestData> input2;
60 input2.push_back(TestData("D"));
61 input2.push_back(TestData("E"));
62 cache.AddItems(input2);
63 EXPECT_EQ(5u, cache.cache_.size());
64 EXPECT_EQ(5, cache.last_restricted_id_);
65 EXPECT_EQ(2u, cache.last_addition_size_);
66
67 output.clear();
68 cache.GetCurrentItems(&output);
69 EXPECT_EQ(2u, output.size());
70 for (int64 i = 0; i < 2; ++i) {
71 EXPECT_EQ(i + 4, output[i].first);
72 EXPECT_EQ(input2[i], output[i].second);
73 }
74
75 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
76 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
77 EXPECT_EQ(input1[2], t);
78 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
79 EXPECT_EQ(input2[1], t);
80
81 // Add another set, overflows.
82 std::vector<TestData> input3;
83 input3.push_back(TestData("F"));
84 input3.push_back(TestData("G"));
85 input3.push_back(TestData("H"));
86 input3.push_back(TestData("I"));
87 cache.AddItems(input3);
88 EXPECT_EQ(7u, cache.cache_.size());
89 EXPECT_EQ(9, cache.last_restricted_id_);
90 EXPECT_EQ(4u, cache.last_addition_size_);
91
92 output.clear();
93 cache.GetCurrentItems(&output);
94 EXPECT_EQ(4u, output.size());
95 for (int64 i = 0; i < 3; ++i) {
96 EXPECT_EQ(i + 6, output[i].first);
97 EXPECT_EQ(input3[i], output[i].second);
98 }
99
100 EXPECT_FALSE(cache.GetItemWithRestrictedID(1, &t));
101 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
102 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
103 EXPECT_EQ(input1[2], t);
104 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
105 EXPECT_EQ(input2[1], t);
106 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
107 EXPECT_EQ(input3[1], t);
108 }
109
110 TEST_F(InstantRestrictedIDCacheTest, ManualIDGeneration) {
111 InstantRestrictedIDCache<TestData> cache(5);
112 EXPECT_EQ(0u, cache.cache_.size());
113 EXPECT_EQ(0, cache.last_restricted_id_);
114 EXPECT_EQ(0u, cache.last_addition_size_);
115
116 // Check first addition.
117 std::vector<ItemIDPair> input1;
118 input1.push_back(std::make_pair(1, TestData("A")));
119 input1.push_back(std::make_pair(2, TestData("B")));
120 input1.push_back(std::make_pair(4, TestData("C")));
121 cache.AddItemsWithRestrictedID(input1);
122 EXPECT_EQ(3u, cache.cache_.size());
123 EXPECT_EQ(4, cache.last_restricted_id_);
124 EXPECT_EQ(3u, cache.last_addition_size_);
125
126 std::vector<ItemIDPair> output;
127 cache.GetCurrentItems(&output);
128 EXPECT_EQ(3u, output.size());
129 for (int i = 0; i < 3; ++i) {
130 EXPECT_EQ(input1[i].first, output[i].first);
131 EXPECT_EQ(input1[i].second, output[i].second);
132 }
133
134 TestData t;
135 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
136 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
137 EXPECT_EQ(input1[2].second, t);
138
139
140 // Add more items, one with same rid, no overflow.
141 std::vector<ItemIDPair> input2;
142 input2.push_back(std::make_pair(4, TestData("D")));
143 input2.push_back(std::make_pair(7, TestData("E")));
144 cache.AddItemsWithRestrictedID(input2);
145 EXPECT_EQ(5u, cache.cache_.size());
146 EXPECT_EQ(7, cache.last_restricted_id_);
147 EXPECT_EQ(2u, cache.last_addition_size_);
148
149 output.clear();
150 cache.GetCurrentItems(&output);
151 EXPECT_EQ(2u, output.size());
152 for (int i = 0; i < 2; ++i) {
153 EXPECT_EQ(input2[i].first, output[i].first);
154 EXPECT_EQ(input2[i].second, output[i].second);
155 }
156
157 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
158 EXPECT_TRUE(cache.GetItemWithRestrictedID(2, &t));
159 EXPECT_EQ(input1[1].second, t);
160 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
161 EXPECT_EQ(input2[0].second, t);
162 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
163 EXPECT_EQ(input2[1].second, t);
164
165 // Add another set, duplicate rids, overflows.
166 std::vector<ItemIDPair> input3;
167 input3.push_back(std::make_pair(1, TestData("F")));
168 input3.push_back(std::make_pair(7, TestData("G")));
169 input3.push_back(std::make_pair(9, TestData("H")));
170 cache.AddItemsWithRestrictedID(input3);
171 EXPECT_EQ(5u, cache.cache_.size());
172 EXPECT_EQ(9, cache.last_restricted_id_);
173 EXPECT_EQ(3u, cache.last_addition_size_);
174
175 output.clear();
176 cache.GetCurrentItems(&output);
177 EXPECT_EQ(3u, output.size());
178 for (int64 i = 0; i < 2; ++i) {
179 EXPECT_EQ(input3[i].first, output[i].first);
180 EXPECT_EQ(input3[i].second, output[i].second);
181 }
182
183 EXPECT_TRUE(cache.GetItemWithRestrictedID(1, &t));
184 EXPECT_EQ(input3[0].second, t);
185 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
186 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
187 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
188 EXPECT_EQ(input2[0].second, t);
189 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
190 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
191 EXPECT_EQ(input3[1].second, t);
192 EXPECT_FALSE(cache.GetItemWithRestrictedID(8, &t));
193 EXPECT_TRUE(cache.GetItemWithRestrictedID(9, &t));
194 EXPECT_EQ(input3[2].second, t);
195 }
196
197 TEST_F(InstantRestrictedIDCacheTest, MixIDGeneration) {
198 InstantRestrictedIDCache<TestData> cache(5);
199 EXPECT_EQ(0u, cache.cache_.size());
200 EXPECT_EQ(0, cache.last_restricted_id_);
201 EXPECT_EQ(0u, cache.last_addition_size_);
202
203 // Add some items with manually assigned ids.
204 std::vector<ItemIDPair> input1;
205 input1.push_back(std::make_pair(1, TestData("A")));
206 input1.push_back(std::make_pair(2, TestData("B")));
207 input1.push_back(std::make_pair(4, TestData("C")));
208 cache.AddItemsWithRestrictedID(input1);
209 EXPECT_EQ(3u, cache.cache_.size());
210 EXPECT_EQ(4, cache.last_restricted_id_);
211 EXPECT_EQ(3u, cache.last_addition_size_);
212
213 std::vector<ItemIDPair> output;
214 cache.GetCurrentItems(&output);
215 EXPECT_EQ(3u, output.size());
216 for (int i = 0; i < 3; ++i) {
217 EXPECT_EQ(input1[i].first, output[i].first);
218 EXPECT_EQ(input1[i].second, output[i].second);
219 }
220
221 TestData t;
222 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
223 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
224 EXPECT_EQ(input1[2].second, t);
225
226 // Add items with auto id generation.
227 std::vector<TestData> input2;
228 input2.push_back(TestData("D"));
229 input2.push_back(TestData("E"));
230 cache.AddItems(input2);
231 EXPECT_EQ(5u, cache.cache_.size());
232 EXPECT_EQ(6, cache.last_restricted_id_);
233 EXPECT_EQ(2u, cache.last_addition_size_);
234
235 output.clear();
236 cache.GetCurrentItems(&output);
237 EXPECT_EQ(2u, output.size());
238 for (int64 i = 0; i < 2; ++i) {
239 EXPECT_EQ(i + 5, output[i].first);
240 EXPECT_EQ(input2[i], output[i].second);
241 }
242
243 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
244 EXPECT_TRUE(cache.GetItemWithRestrictedID(2, &t));
245 EXPECT_EQ(input1[1].second, t);
246 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
247 EXPECT_EQ(input1[2].second, t);
248 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
249 EXPECT_EQ(input2[0], t);
250 EXPECT_TRUE(cache.GetItemWithRestrictedID(6, &t));
251 EXPECT_EQ(input2[1], t);
252 EXPECT_FALSE(cache.GetItemWithRestrictedID(7, &t));
253
254 // Add manually assigned ids again.
255 std::vector<ItemIDPair> input3;
256 input3.push_back(std::make_pair(1, TestData("F")));
257 input3.push_back(std::make_pair(5, TestData("G")));
258 input3.push_back(std::make_pair(6, TestData("H")));
259 cache.AddItemsWithRestrictedID(input3);
260 EXPECT_EQ(5u, cache.cache_.size());
261 EXPECT_EQ(6, cache.last_restricted_id_);
262 EXPECT_EQ(3u, cache.last_addition_size_);
263
264 output.clear();
265 cache.GetCurrentItems(&output);
266 EXPECT_EQ(3u, output.size());
267 for (int64 i = 0; i < 2; ++i) {
268 EXPECT_EQ(input3[i].first, output[i].first);
269 EXPECT_EQ(input3[i].second, output[i].second);
270 }
271
272 EXPECT_TRUE(cache.GetItemWithRestrictedID(1, &t));
273 EXPECT_EQ(input3[0].second, t);
274 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
275 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
276 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
277 EXPECT_EQ(input3[1].second, t);
278 EXPECT_TRUE(cache.GetItemWithRestrictedID(6, &t));
279 EXPECT_EQ(input3[2].second, t);
280 EXPECT_FALSE(cache.GetItemWithRestrictedID(7, &t));
281 }
282
283 TEST_F(InstantRestrictedIDCacheTest, AdditionOverflow) {
284 InstantRestrictedIDCache<TestData> cache(2);
285
286 EXPECT_EQ(0u, cache.cache_.size());
287 EXPECT_EQ(0, cache.last_restricted_id_);
288 EXPECT_EQ(0u, cache.last_addition_size_);
289
290 // Add too many.
291 std::vector<TestData> input1;
292 input1.push_back(TestData("A"));
293 input1.push_back(TestData("B"));
294 input1.push_back(TestData("C"));
295 cache.AddItems(input1);
296 EXPECT_EQ(2u, cache.cache_.size());
297 EXPECT_EQ(3, cache.last_restricted_id_);
298 EXPECT_EQ(3u, cache.last_addition_size_);
299
300 std::vector<ItemIDPair> output;
301 cache.GetCurrentItems(&output);
302 EXPECT_EQ(2u, output.size());
303 for (int64 i = 0; i < 2; ++i) {
304 EXPECT_EQ(i + 2, output[i].first);
305 EXPECT_EQ(input1[i + 1], output[i].second);
306 }
307
308 TestData t;
309 EXPECT_FALSE(cache.GetItemWithRestrictedID(1, &t));
310 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
311 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
312 EXPECT_EQ(input1[2], t);
313 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698