From 0cb59c0dce34bd1518aa775e45e1dd7810195b78 Mon Sep 17 00:00:00 2001 From: Sergio Giro Date: Fri, 2 Oct 2015 17:31:34 +0100 Subject: system/core: fix iterator for LruCache Was failing to return the first element Change-Id: Ic803f5d463a56519212014d0d190407cf4b859cf --- libutils/tests/LruCache_test.cpp | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) (limited to 'libutils/tests/LruCache_test.cpp') diff --git a/libutils/tests/LruCache_test.cpp b/libutils/tests/LruCache_test.cpp index 2ed84d700..580b98058 100644 --- a/libutils/tests/LruCache_test.cpp +++ b/libutils/tests/LruCache_test.cpp @@ -293,4 +293,110 @@ TEST_F(LruCacheTest, CallbackOnClear) { EXPECT_EQ(3, callback.callbackCount); } +TEST_F(LruCacheTest, IteratorCheck) { + LruCache cache(100); + + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + EXPECT_EQ(3U, cache.size()); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + int v = it.value(); + // Check we haven't seen the value before. + EXPECT_TRUE(returnedValues.find(v) == returnedValues.end()); + returnedValues.insert(v); + } + EXPECT_EQ(std::unordered_set({4, 5, 6}), returnedValues); +} + +TEST_F(LruCacheTest, EmptyCacheIterator) { + // Check that nothing crashes... + LruCache cache(100); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set(), returnedValues); +} + +TEST_F(LruCacheTest, OneElementCacheIterator) { + // Check that nothing crashes... + LruCache cache(100); + cache.put(1, 2); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set({ 2 }), returnedValues); +} + +TEST_F(LruCacheTest, OneElementCacheRemove) { + LruCache cache(100); + cache.put(1, 2); + + cache.remove(1); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set({ }), returnedValues); +} + +TEST_F(LruCacheTest, Remove) { + LruCache cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(2); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set({ 4, 6 }), returnedValues); +} + +TEST_F(LruCacheTest, RemoveYoungest) { + LruCache cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(3); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set({ 4, 5 }), returnedValues); +} + +TEST_F(LruCacheTest, RemoveNonMember) { + LruCache cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(7); + + LruCache::Iterator it(cache); + std::unordered_set returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set({ 4, 5, 6 }), returnedValues); +} + } -- cgit v1.2.3