Commit ff035877 authored by sreeram@chromium.org's avatar sreeram@chromium.org

Instant: Allow empty sets to be added to the cache.

BUG=223671
R=shishir@chromium.org,brettw@chromium.org
TEST=See bug.

Review URL: https://codereview.chromium.org/12742014

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@190516 0039d316-1c4b-4281-b951-d872f2087c98
parent 33d6b44a
......@@ -68,6 +68,7 @@ class InstantRestrictedIDCache {
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, CrazyIDGeneration);
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, ManualIDGeneration);
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, MixIDGeneration);
FRIEND_TEST_ALL_PREFIXES(InstantRestrictedIDCacheTest, AddEmptySet);
typedef base::MRUCache<InstantRestrictedID, T> CacheImpl;
......@@ -92,8 +93,12 @@ InstantRestrictedIDCache<T>::~InstantRestrictedIDCache() {
template <typename T>
void InstantRestrictedIDCache<T>::AddItems(const ItemVector& items) {
if (items.size() == 0 || items.size() > cache_.max_size())
DCHECK_LE(items.size(), cache_.max_size());
if (items.empty()) {
last_add_start_ = cache_.rend();
return;
}
for (size_t i = 0; i < items.size(); ++i) {
InstantRestrictedID id = ++last_restricted_id_;
......@@ -106,8 +111,12 @@ void InstantRestrictedIDCache<T>::AddItems(const ItemVector& items) {
template <typename T>
void InstantRestrictedIDCache<T>::AddItemsWithRestrictedID(
const ItemIDVector& items) {
if (items.size() == 0 || items.size() > cache_.max_size())
DCHECK_LE(items.size(), cache_.max_size());
if (items.empty()) {
last_add_start_ = cache_.rend();
return;
}
std::set<InstantRestrictedID> ids_added;
for (size_t i = 0; i < items.size(); ++i) {
......
......@@ -346,3 +346,49 @@ TEST_F(InstantRestrictedIDCacheTest, MixIDGeneration) {
EXPECT_TRUE(cache.GetItemWithRestrictedID(7, &t));
EXPECT_EQ(input3[2].second, t);
}
TEST_F(InstantRestrictedIDCacheTest, AddEmptySet) {
InstantRestrictedIDCache<TestData> cache(9);
EXPECT_EQ(0u, cache.cache_.size());
EXPECT_EQ(0, cache.last_restricted_id_);
// Add a non-empty set of items.
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(3, cache.last_restricted_id_);
std::vector<ItemIDPair> output;
cache.GetCurrentItems(&output);
EXPECT_EQ(3u, output.size());
// Add an empty set.
cache.AddItems(std::vector<TestData>());
EXPECT_EQ(3u, cache.cache_.size());
EXPECT_EQ(3, cache.last_restricted_id_);
cache.GetCurrentItems(&output);
EXPECT_TRUE(output.empty());
// Manual IDs.
std::vector<ItemIDPair> input2;
input2.push_back(std::make_pair(10, TestData("A")));
input2.push_back(std::make_pair(11, TestData("B")));
input2.push_back(std::make_pair(12, TestData("C")));
cache.AddItemsWithRestrictedID(input2);
EXPECT_EQ(6u, cache.cache_.size());
EXPECT_EQ(12, cache.last_restricted_id_);
cache.GetCurrentItems(&output);
EXPECT_EQ(3u, output.size());
cache.AddItemsWithRestrictedID(std::vector<ItemIDPair>());
EXPECT_EQ(6u, cache.cache_.size());
EXPECT_EQ(12, cache.last_restricted_id_);
cache.GetCurrentItems(&output);
EXPECT_TRUE(output.empty());
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment