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

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: Merging David's and Sreeram's changes. 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>::RestrictedIDItemPair
28 RestrictedIDItemPair;
29
30 TEST_F(InstantRestrictedIDCacheTest, AutoIDGeneration) {
31 InstantRestrictedIDCache<TestData> cache(7);
32 EXPECT_EQ(0u, cache.cache_.size());
33 EXPECT_EQ(0, cache.last_restricted_id_);
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(3, cache.last_restricted_id_);
44 EXPECT_EQ(3u, cache.last_addition_size_);
45
46 std::vector<RestrictedIDItemPair> output;
47 cache.GetCurrentItems(&output);
48 EXPECT_EQ(3u, output.size());
49 for (int64 i = 0; i < 3; ++i) {
50 EXPECT_EQ(i + 1, output[i].first);
51 EXPECT_EQ(input1[i], output[i].second);
52 }
53
54 TestData t;
55 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
56 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &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(5, cache.last_restricted_id_);
66 EXPECT_EQ(2u, cache.last_addition_size_);
67
68 output.clear();
69 cache.GetCurrentItems(&output);
70 EXPECT_EQ(2u, output.size());
71 for (int64 i = 0; i < 2; ++i) {
72 EXPECT_EQ(i + 4, output[i].first);
73 EXPECT_EQ(input2[i], output[i].second);
74 }
75
76 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
77 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
78 EXPECT_EQ(input1[2], t);
79 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &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(9, cache.last_restricted_id_);
91 EXPECT_EQ(4u, cache.last_addition_size_);
92
93 output.clear();
94 cache.GetCurrentItems(&output);
95 EXPECT_EQ(4u, output.size());
96 for (int64 i = 0; i < 3; ++i) {
97 EXPECT_EQ(i + 6, output[i].first);
98 EXPECT_EQ(input3[i], output[i].second);
99 }
100
101 EXPECT_FALSE(cache.GetItemWithRestrictedID(1, &t));
102 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
103 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
104 EXPECT_EQ(input1[2], t);
105 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
106 EXPECT_EQ(input2[1], t);
107 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
108 EXPECT_EQ(input3[1], t);
109 }
110
111 TEST_F(InstantRestrictedIDCacheTest, ManualIDGeneration) {
112 InstantRestrictedIDCache<TestData> cache(5);
113 EXPECT_EQ(0u, cache.cache_.size());
114 EXPECT_EQ(0, cache.last_restricted_id_);
115 EXPECT_EQ(0u, cache.last_addition_size_);
116
117 // Check first addition.
118 std::vector<RestrictedIDItemPair> input1;
119 input1.push_back(std::make_pair(1, TestData("A")));
120 input1.push_back(std::make_pair(2, TestData("B")));
121 input1.push_back(std::make_pair(4, TestData("C")));
122 cache.AddItemsWithRestrictedID(input1);
123 EXPECT_EQ(3u, cache.cache_.size());
124 EXPECT_EQ(4, cache.last_restricted_id_);
125 EXPECT_EQ(3u, cache.last_addition_size_);
126
127 std::vector<RestrictedIDItemPair> output;
128 cache.GetCurrentItems(&output);
129 EXPECT_EQ(3u, output.size());
130 for (int i = 0; i < 3; ++i) {
131 EXPECT_EQ(input1[i].first, output[i].first);
132 EXPECT_EQ(input1[i].second, output[i].second);
133 }
134
135 TestData t;
136 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
137 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
138 EXPECT_EQ(input1[2].second, t);
139
140
141 // Add more items, one with same rid, no overflow.
142 std::vector<RestrictedIDItemPair> input2;
143 input2.push_back(std::make_pair(4, TestData("D")));
144 input2.push_back(std::make_pair(7, TestData("E")));
145 cache.AddItemsWithRestrictedID(input2);
146 EXPECT_EQ(5u, cache.cache_.size());
147 EXPECT_EQ(7, cache.last_restricted_id_);
148 EXPECT_EQ(2u, cache.last_addition_size_);
149
150 output.clear();
151 cache.GetCurrentItems(&output);
152 EXPECT_EQ(2u, output.size());
153 for (int i = 0; i < 2; ++i) {
154 EXPECT_EQ(input2[i].first, output[i].first);
155 EXPECT_EQ(input2[i].second, output[i].second);
156 }
157
158 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
159 EXPECT_TRUE(cache.GetItemWithRestrictedID(2, &t));
160 EXPECT_EQ(input1[1].second, t);
161 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
162 EXPECT_EQ(input2[0].second, t);
163 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
164 EXPECT_EQ(input2[1].second, t);
165
166 // Add another set, duplicate rids, overflows.
167 std::vector<RestrictedIDItemPair> input3;
168 input3.push_back(std::make_pair(1, TestData("F")));
169 input3.push_back(std::make_pair(7, TestData("G")));
170 input3.push_back(std::make_pair(9, TestData("H")));
171 cache.AddItemsWithRestrictedID(input3);
172 EXPECT_EQ(5u, cache.cache_.size());
173 EXPECT_EQ(9, cache.last_restricted_id_);
174 EXPECT_EQ(3u, cache.last_addition_size_);
175
176 output.clear();
177 cache.GetCurrentItems(&output);
178 EXPECT_EQ(3u, output.size());
179 for (int64 i = 0; i < 2; ++i) {
180 EXPECT_EQ(input3[i].first, output[i].first);
181 EXPECT_EQ(input3[i].second, output[i].second);
182 }
183
184 EXPECT_TRUE(cache.GetItemWithRestrictedID(1, &t));
185 EXPECT_EQ(input3[0].second, t);
186 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
187 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
188 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
189 EXPECT_EQ(input2[0].second, t);
190 EXPECT_FALSE(cache.GetItemWithRestrictedID(6, &t));
191 EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
192 EXPECT_EQ(input3[1].second, t);
193 EXPECT_FALSE(cache.GetItemWithRestrictedID(8, &t));
194 EXPECT_TRUE(cache.GetItemWithRestrictedID(9, &t));
195 EXPECT_EQ(input3[2].second, t);
196 }
197
198 TEST_F(InstantRestrictedIDCacheTest, MixIDGeneration) {
199 InstantRestrictedIDCache<TestData> cache(5);
200 EXPECT_EQ(0u, cache.cache_.size());
201 EXPECT_EQ(0, cache.last_restricted_id_);
202 EXPECT_EQ(0u, cache.last_addition_size_);
203
204 // Add some items with manually assigned ids.
205 std::vector<RestrictedIDItemPair> input1;
206 input1.push_back(std::make_pair(1, TestData("A")));
207 input1.push_back(std::make_pair(2, TestData("B")));
208 input1.push_back(std::make_pair(4, TestData("C")));
209 cache.AddItemsWithRestrictedID(input1);
210 EXPECT_EQ(3u, cache.cache_.size());
211 EXPECT_EQ(4, cache.last_restricted_id_);
212 EXPECT_EQ(3u, cache.last_addition_size_);
213
214 std::vector<RestrictedIDItemPair> output;
215 cache.GetCurrentItems(&output);
216 EXPECT_EQ(3u, output.size());
217 for (int i = 0; i < 3; ++i) {
218 EXPECT_EQ(input1[i].first, output[i].first);
219 EXPECT_EQ(input1[i].second, output[i].second);
220 }
221
222 TestData t;
223 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
224 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
225 EXPECT_EQ(input1[2].second, t);
226
227 // Add items with auto id generation.
228 std::vector<TestData> input2;
229 input2.push_back(TestData("D"));
230 input2.push_back(TestData("E"));
231 cache.AddItems(input2);
232 EXPECT_EQ(5u, cache.cache_.size());
233 EXPECT_EQ(6, cache.last_restricted_id_);
234 EXPECT_EQ(2u, cache.last_addition_size_);
235
236 output.clear();
237 cache.GetCurrentItems(&output);
238 EXPECT_EQ(2u, output.size());
239 for (int64 i = 0; i < 2; ++i) {
240 EXPECT_EQ(i + 5, output[i].first);
241 EXPECT_EQ(input2[i], output[i].second);
242 }
243
244 EXPECT_FALSE(cache.GetItemWithRestrictedID(3, &t));
245 EXPECT_TRUE(cache.GetItemWithRestrictedID(2, &t));
246 EXPECT_EQ(input1[1].second, t);
247 EXPECT_TRUE(cache.GetItemWithRestrictedID(4, &t));
248 EXPECT_EQ(input1[2].second, t);
249 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
250 EXPECT_EQ(input2[0], t);
251 EXPECT_TRUE(cache.GetItemWithRestrictedID(6, &t));
252 EXPECT_EQ(input2[1], t);
253 EXPECT_FALSE(cache.GetItemWithRestrictedID(7, &t));
254
255 // Add manually assigned ids again.
256 std::vector<RestrictedIDItemPair> input3;
257 input3.push_back(std::make_pair(1, TestData("F")));
258 input3.push_back(std::make_pair(5, TestData("G")));
259 input3.push_back(std::make_pair(6, TestData("H")));
260 cache.AddItemsWithRestrictedID(input3);
261 EXPECT_EQ(5u, cache.cache_.size());
262 EXPECT_EQ(6, cache.last_restricted_id_);
263 EXPECT_EQ(3u, cache.last_addition_size_);
264
265 output.clear();
266 cache.GetCurrentItems(&output);
267 EXPECT_EQ(3u, output.size());
268 for (int64 i = 0; i < 2; ++i) {
269 EXPECT_EQ(input3[i].first, output[i].first);
270 EXPECT_EQ(input3[i].second, output[i].second);
271 }
272
273 EXPECT_TRUE(cache.GetItemWithRestrictedID(1, &t));
274 EXPECT_EQ(input3[0].second, t);
275 EXPECT_FALSE(cache.GetItemWithRestrictedID(2, &t));
276 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
277 EXPECT_TRUE(cache.GetItemWithRestrictedID(5, &t));
278 EXPECT_EQ(input3[1].second, t);
279 EXPECT_TRUE(cache.GetItemWithRestrictedID(6, &t));
280 EXPECT_EQ(input3[2].second, t);
281 EXPECT_FALSE(cache.GetItemWithRestrictedID(7, &t));
282 }
283
284 TEST_F(InstantRestrictedIDCacheTest, AdditionOverflow) {
285 InstantRestrictedIDCache<TestData> cache(2);
286
287 EXPECT_EQ(0u, cache.cache_.size());
288 EXPECT_EQ(0, cache.last_restricted_id_);
289 EXPECT_EQ(0u, cache.last_addition_size_);
290
291 // Add too many.
292 std::vector<TestData> input1;
293 input1.push_back(TestData("A"));
294 input1.push_back(TestData("B"));
295 input1.push_back(TestData("C"));
296 cache.AddItems(input1);
297 EXPECT_EQ(2u, cache.cache_.size());
298 EXPECT_EQ(3, cache.last_restricted_id_);
299 EXPECT_EQ(3u, cache.last_addition_size_);
300
301 std::vector<RestrictedIDItemPair> output;
302 cache.GetCurrentItems(&output);
303 EXPECT_EQ(2u, output.size());
304 for (int64 i = 0; i < 2; ++i) {
305 EXPECT_EQ(i + 2, output[i].first);
306 EXPECT_EQ(input1[i + 1], output[i].second);
307 }
308
309 TestData t;
310 EXPECT_FALSE(cache.GetItemWithRestrictedID(1, &t));
311 EXPECT_FALSE(cache.GetItemWithRestrictedID(4, &t));
312 EXPECT_TRUE(cache.GetItemWithRestrictedID(3, &t));
313 EXPECT_EQ(input1[2], t);
314 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698