29TEST(TaggedCacheTest, tagged_cache)
31 using namespace std::chrono_literals;
41 Cache c(
"test", 1, 1s, clock, journal);
45 EXPECT_EQ(c.getCacheSize(), 0);
46 EXPECT_EQ(c.getTrackSize(), 0);
47 EXPECT_FALSE(c.insert(1,
"one"));
48 EXPECT_EQ(c.getCacheSize(), 1);
49 EXPECT_EQ(c.getTrackSize(), 1);
53 EXPECT_TRUE(c.retrieve(1, s));
59 EXPECT_EQ(c.getCacheSize(), 0);
60 EXPECT_EQ(c.getTrackSize(), 0);
66 EXPECT_FALSE(c.insert(2,
"two"));
67 EXPECT_EQ(c.getCacheSize(), 1);
68 EXPECT_EQ(c.getTrackSize(), 1);
72 EXPECT_NE(p,
nullptr);
75 EXPECT_EQ(c.getCacheSize(), 0);
76 EXPECT_EQ(c.getTrackSize(), 1);
82 EXPECT_EQ(c.getCacheSize(), 0);
83 EXPECT_EQ(c.getTrackSize(), 0);
88 EXPECT_FALSE(c.insert(3,
"three"));
91 auto const p1 = c.fetch(3);
93 c.canonicalizeReplaceClient(3, p2);
94 EXPECT_EQ(p1.get(), p2.get());
98 EXPECT_EQ(c.getCacheSize(), 0);
99 EXPECT_EQ(c.getTrackSize(), 0);
107 EXPECT_FALSE(c.insert(4,
"four"));
108 EXPECT_EQ(c.getCacheSize(), 1);
109 EXPECT_EQ(c.getTrackSize(), 1);
113 auto const p1 = c.fetch(4);
114 EXPECT_NE(p1,
nullptr);
115 EXPECT_EQ(c.getCacheSize(), 1);
116 EXPECT_EQ(c.getTrackSize(), 1);
120 EXPECT_EQ(c.getCacheSize(), 0);
121 EXPECT_EQ(c.getTrackSize(), 1);
124 EXPECT_TRUE(c.canonicalizeReplaceClient(4, p2));
125 EXPECT_EQ(c.getCacheSize(), 1);
126 EXPECT_EQ(c.getTrackSize(), 1);
128 EXPECT_EQ(p1.get(), p2.get());
133 EXPECT_EQ(c.getCacheSize(), 0);
134 EXPECT_EQ(c.getTrackSize(), 0);
138 EXPECT_FALSE(c.insert(5,
"five"));
139 EXPECT_EQ(c.getCacheSize(), 1);
140 EXPECT_EQ(c.size(), 1);
143 auto const p1 = c.fetch(5);
144 EXPECT_NE(p1,
nullptr);
145 EXPECT_EQ(c.getCacheSize(), 1);
146 EXPECT_EQ(c.size(), 1);
151 EXPECT_EQ(c.getCacheSize(), 0);
152 EXPECT_EQ(c.size(), 1);
155 EXPECT_TRUE(c.canonicalizeReplaceCache(5, p2));
156 EXPECT_EQ(c.getCacheSize(), 1);
157 EXPECT_EQ(c.size(), 1);
159 EXPECT_NE(p1.get(), p2.get());
160 EXPECT_EQ(*p2,
"five_2");
162 auto const p3 = c.fetch(5);
163 EXPECT_NE(p3,
nullptr);
164 EXPECT_EQ(p3.get(), p2.get());
165 EXPECT_NE(p3.get(), p1.get());
170 EXPECT_EQ(c.getCacheSize(), 0);
171 EXPECT_EQ(c.size(), 0);
185 MyRefCountObject() =
default;
186 explicit MyRefCountObject(
std::string data) : data(std::move(data))
193 return data == other;
204 IntrPtrCache intrPtrCache(
"IntrPtrTest", 1, 1s, clock, journal);
207 EXPECT_EQ(intrPtrCache.getCacheSize(), 1);
208 EXPECT_EQ(intrPtrCache.size(), 1);
212 intrPtrCache.canonicalizeReplaceCache(
215 auto p = intrPtrCache.fetch(1);
216 EXPECT_EQ(*p,
"one_replaced");
220 intrPtrCache.sweep();
221 EXPECT_EQ(intrPtrCache.getCacheSize(), 0);
222 EXPECT_EQ(intrPtrCache.size(), 1);
224 intrPtrCache.canonicalizeReplaceCache(
227 auto p2 = intrPtrCache.fetch(1);
228 EXPECT_EQ(*p2,
"one_replaced_2");
230 intrPtrCache.del(1,
true);
233 intrPtrCache.canonicalizeReplaceCache(
235 auto p3 = intrPtrCache.fetch(1);
236 EXPECT_EQ(*p3,
"one_replaced_3");
240 intrPtrCache.sweep();
241 EXPECT_EQ(intrPtrCache.getCacheSize(), 0);
242 EXPECT_EQ(intrPtrCache.size(), 0);