diff options
| author | Sergio Giro <sgiro@google.com> | 2015-10-13 07:36:52 +0000 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2015-10-13 07:36:52 +0000 |
| commit | 9443fd94e3161c9c2c1401bb888d288d3dc5f218 (patch) | |
| tree | c417b865ebf07489a1100ba095b3e9bc69996fc8 /libutils/tests/LruCache_test.cpp | |
| parent | 7c009ac097178678660d0c1109d31760ddb9b43a (diff) | |
| parent | f83766079e248e04065103a4720364c0193777ee (diff) | |
| download | system_core-9443fd94e3161c9c2c1401bb888d288d3dc5f218.tar.gz system_core-9443fd94e3161c9c2c1401bb888d288d3dc5f218.tar.bz2 system_core-9443fd94e3161c9c2c1401bb888d288d3dc5f218.zip | |
am f8376607: Merge "system/core: fix iterator for LruCache"
* commit 'f83766079e248e04065103a4720364c0193777ee':
system/core: fix iterator for LruCache
Diffstat (limited to 'libutils/tests/LruCache_test.cpp')
| -rw-r--r-- | libutils/tests/LruCache_test.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
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<int, int> cache(100); + + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + EXPECT_EQ(3U, cache.size()); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> 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<int>({4, 5, 6}), returnedValues); +} + +TEST_F(LruCacheTest, EmptyCacheIterator) { + // Check that nothing crashes... + LruCache<int, int> cache(100); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>(), returnedValues); +} + +TEST_F(LruCacheTest, OneElementCacheIterator) { + // Check that nothing crashes... + LruCache<int, int> cache(100); + cache.put(1, 2); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>({ 2 }), returnedValues); +} + +TEST_F(LruCacheTest, OneElementCacheRemove) { + LruCache<int, int> cache(100); + cache.put(1, 2); + + cache.remove(1); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>({ }), returnedValues); +} + +TEST_F(LruCacheTest, Remove) { + LruCache<int, int> cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(2); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>({ 4, 6 }), returnedValues); +} + +TEST_F(LruCacheTest, RemoveYoungest) { + LruCache<int, int> cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(3); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>({ 4, 5 }), returnedValues); +} + +TEST_F(LruCacheTest, RemoveNonMember) { + LruCache<int, int> cache(100); + cache.put(1, 4); + cache.put(2, 5); + cache.put(3, 6); + + cache.remove(7); + + LruCache<int, int>::Iterator it(cache); + std::unordered_set<int> returnedValues; + while (it.next()) { + returnedValues.insert(it.value()); + } + EXPECT_EQ(std::unordered_set<int>({ 4, 5, 6 }), returnedValues); +} + } |
