• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "aemu/base/LruCache.h"
16 
17 #include <cstdint>
18 #include <string>
19 
20 #include <gmock/gmock.h>
21 #include <gtest/gtest.h>
22 
23 namespace android {
24 namespace base {
25 namespace {
26 
27 using ::testing::IsNull;
28 using ::testing::Pointee;
29 using ::testing::StrEq;
30 
TEST(LruCache,Basic)31 TEST(LruCache, Basic) {
32     LruCache<int, std::string> lru(3);
33 
34     ASSERT_THAT(lru.get(0), IsNull());
35     ASSERT_THAT(lru.get(1), IsNull());
36     ASSERT_THAT(lru.get(2), IsNull());
37     ASSERT_THAT(lru.get(3), IsNull());
38 
39     lru.set(1, "hello");
40     lru.set(2, "world");
41 
42     ASSERT_THAT(lru.get(0), IsNull());
43     ASSERT_THAT(lru.get(1), Pointee(StrEq("hello")));
44     ASSERT_THAT(lru.get(2), Pointee(StrEq("world")));
45     ASSERT_THAT(lru.get(3), IsNull());
46 
47     lru.set(2, "world");
48     lru.set(2, "world");
49     lru.set(2, "world");
50     lru.set(2, "world");
51 
52     ASSERT_THAT(lru.get(0), IsNull());
53     ASSERT_THAT(lru.get(1), Pointee(StrEq("hello")));
54     ASSERT_THAT(lru.get(2), Pointee(StrEq("world")));
55     ASSERT_THAT(lru.get(3), IsNull());
56 
57     lru.set(2, "helloworld");
58 
59     ASSERT_THAT(lru.get(0), IsNull());
60     ASSERT_THAT(lru.get(1), Pointee(StrEq("hello")));
61     ASSERT_THAT(lru.get(2), Pointee(StrEq("helloworld")));
62     ASSERT_THAT(lru.get(3), IsNull());
63 
64     lru.set(3, "foo");
65 
66     ASSERT_THAT(lru.get(0), IsNull());
67     ASSERT_THAT(lru.get(1), Pointee(StrEq("hello")));
68     ASSERT_THAT(lru.get(2), Pointee(StrEq("helloworld")));
69     ASSERT_THAT(lru.get(3), Pointee(StrEq("foo")));
70 
71     lru.set(0, "bar");
72 
73     ASSERT_THAT(lru.get(0), Pointee(StrEq("bar")));
74     ASSERT_THAT(lru.get(1), IsNull());
75     ASSERT_THAT(lru.get(2), Pointee(StrEq("helloworld")));
76     ASSERT_THAT(lru.get(3), Pointee(StrEq("foo")));
77 
78     lru.remove(2);
79 
80     ASSERT_THAT(lru.get(0), Pointee(StrEq("bar")));
81     ASSERT_THAT(lru.get(1), IsNull());
82     ASSERT_THAT(lru.get(2), IsNull());
83     ASSERT_THAT(lru.get(3), Pointee(StrEq("foo")));
84 
85     lru.remove(1);
86     lru.remove(5);
87 
88     ASSERT_THAT(lru.get(0), Pointee(StrEq("bar")));
89     ASSERT_THAT(lru.get(1), IsNull());
90     ASSERT_THAT(lru.get(2), IsNull());
91     ASSERT_THAT(lru.get(3), Pointee(StrEq("foo")));
92 }
93 
94 }  // namespace
95 }  // namespace base
96 }  // namespace android