Index: chrome/common/instant_restricted_id_cache_unittest.cc |
diff --git a/chrome/common/instant_restricted_id_cache_unittest.cc b/chrome/common/instant_restricted_id_cache_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..91f3d4f3ac054b2efcb106b7be53d6dc42e854ab |
--- /dev/null |
+++ b/chrome/common/instant_restricted_id_cache_unittest.cc |
@@ -0,0 +1,145 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include <string> |
+#include <utility> |
+#include <vector> |
+#include "chrome/common/instant_restricted_id_cache.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace { |
+ |
+struct TestData { |
+ TestData() { } |
dhollowa
2013/03/06 02:12:58
nit: {}
Shishir
2013/03/11 21:07:24
Done.
|
+ 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.
|
+ |
+ 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.
|
+ return rhs.value == value; |
+ } |
+ |
+ std::string value; |
+}; |
+ |
+} // namespace |
+ |
+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.
|
+}; |
+ |
+TEST_F(InstantRestrictedIdCacheTest, AddAndFetchTest) { |
+ InstantRestrictedIdCache<TestData> cache(7); |
+ |
+ EXPECT_EQ(0u, cache.cache_.size()); |
+ EXPECT_EQ(0u, cache.results_base_); |
+ EXPECT_EQ(0u, cache.last_addition_size_); |
+ |
+ // Check first addition. |
+ std::vector<TestData> input1; |
+ input1.push_back(TestData("A")); |
+ input1.push_back(TestData("B")); |
+ input1.push_back(TestData("C")); |
+ cache.AddItems(input1); |
+ EXPECT_EQ(3u, cache.cache_.size()); |
+ EXPECT_EQ(0u, cache.results_base_); |
+ EXPECT_EQ(3u, cache.last_addition_size_); |
+ |
+ std::vector<std::pair<size_t, TestData> > output; |
+ cache.GetCurrentItems(&output); |
+ EXPECT_EQ(3u, output.size()); |
+ for (size_t i = 0; i < 3; ++i) { |
+ EXPECT_EQ(i, output[i].first); |
+ EXPECT_EQ(input1[i], output[i].second); |
+ } |
+ |
+ TestData t; |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(3, &t)); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); |
+ EXPECT_EQ(input1[2], t); |
+ |
+ // Add more items, no overflow. |
+ std::vector<TestData> input2; |
+ input2.push_back(TestData("D")); |
+ input2.push_back(TestData("E")); |
+ cache.AddItems(input2); |
+ EXPECT_EQ(5u, cache.cache_.size()); |
+ EXPECT_EQ(0u, cache.results_base_); |
+ EXPECT_EQ(2u, cache.last_addition_size_); |
+ |
+ output.clear(); |
+ cache.GetCurrentItems(&output); |
+ EXPECT_EQ(2u, output.size()); |
+ for (size_t i = 0; i < 2; ++i) { |
+ EXPECT_EQ(i + 3, output[i].first); |
+ EXPECT_EQ(input2[i], output[i].second); |
+ } |
+ |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(5, &t)); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); |
+ EXPECT_EQ(input1[2], t); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(4, &t)); |
+ EXPECT_EQ(input2[1], t); |
+ |
+ // Add another set, overflows. |
+ std::vector<TestData> input3; |
+ input3.push_back(TestData("F")); |
+ input3.push_back(TestData("G")); |
+ input3.push_back(TestData("H")); |
+ input3.push_back(TestData("I")); |
+ cache.AddItems(input3); |
+ EXPECT_EQ(7u, cache.cache_.size()); |
+ EXPECT_EQ(2u, cache.results_base_); |
+ EXPECT_EQ(4u, cache.last_addition_size_); |
+ |
+ output.clear(); |
+ cache.GetCurrentItems(&output); |
+ EXPECT_EQ(4u, output.size()); |
+ for (size_t i = 0; i < 2; ++i) { |
+ EXPECT_EQ(i + 5, output[i].first); |
+ EXPECT_EQ(input3[i], output[i].second); |
+ } |
+ |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(0, &t)); |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(1, &t)); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); |
+ EXPECT_EQ(input1[2], t); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(4, &t)); |
+ EXPECT_EQ(input2[1], t); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(6, &t)); |
+ EXPECT_EQ(input3[1], t); |
+ |
+ cache.Reset(); |
+ EXPECT_EQ(0u, cache.cache_.size()); |
+ EXPECT_EQ(0u, cache.results_base_); |
+ EXPECT_EQ(0u, cache.last_addition_size_); |
+} |
dhollowa
2013/03/06 02:12:58
nit: extra line
Shishir
2013/03/11 21:07:24
Done.
|
+TEST_F(InstantRestrictedIdCacheTest, EdgeCasesTest) { |
+ InstantRestrictedIdCache<TestData> cache(2); |
+ |
+ EXPECT_EQ(0u, cache.cache_.size()); |
+ EXPECT_EQ(0u, cache.results_base_); |
+ EXPECT_EQ(0u, cache.last_addition_size_); |
+ |
+ // Add too many. |
+ std::vector<TestData> input1; |
+ input1.push_back(TestData("A")); |
+ input1.push_back(TestData("B")); |
+ input1.push_back(TestData("C")); |
+ cache.AddItems(input1); |
+ EXPECT_EQ(2u, cache.cache_.size()); |
+ EXPECT_EQ(1u, cache.results_base_); |
+ EXPECT_EQ(3u, cache.last_addition_size_); |
+ |
+ std::vector<std::pair<size_t, TestData> > output; |
+ cache.GetCurrentItems(&output); |
+ EXPECT_EQ(2u, output.size()); |
+ for (size_t i = 0; i < 2; ++i) { |
+ EXPECT_EQ(i + 1, output[i].first); |
+ EXPECT_EQ(input1[i + 1], output[i].second); |
+ } |
+ |
+ TestData t; |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(0, &t)); |
+ EXPECT_FALSE(cache.GetItemWithRestrictedId(3, &t)); |
+ EXPECT_TRUE(cache.GetItemWithRestrictedId(2, &t)); |
+ EXPECT_EQ(input1[2], t); |
+} |