32 #define TEST_NAME "util/cache"
41 5, [](
const int key) {
return std::make_shared<int>(key); });
42 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
43 BOOST_CHECK_EQUAL(cache.MaxNumElems(), 5);
48 5, [](
const int key) {
return std::make_shared<int>(key); });
49 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
50 for (
int i = 0; i < 5; ++i) {
51 BOOST_CHECK_EQUAL(*cache.Get(i), i);
52 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
53 BOOST_CHECK(cache.Exists(i));
56 BOOST_CHECK_EQUAL(*cache.Get(5), 5);
57 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
58 BOOST_CHECK(!cache.Exists(0));
59 BOOST_CHECK(cache.Exists(5));
61 BOOST_CHECK_EQUAL(*cache.Get(5), 5);
62 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
63 BOOST_CHECK(!cache.Exists(0));
64 BOOST_CHECK(cache.Exists(5));
66 BOOST_CHECK_EQUAL(*cache.Get(6), 6);
67 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
68 BOOST_CHECK(!cache.Exists(0));
69 BOOST_CHECK(!cache.Exists(1));
70 BOOST_CHECK(cache.Exists(6));
75 5, [](
const int key) {
return std::make_shared<int>(key); });
76 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
77 for (
int i = 0; i < 5; ++i) {
78 BOOST_CHECK_EQUAL(*cache.Get(i), i);
79 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
80 BOOST_CHECK(cache.Exists(i));
83 BOOST_CHECK_EQUAL(*cache.Get(5), 5);
84 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
85 BOOST_CHECK(!cache.Exists(0));
86 BOOST_CHECK(cache.Exists(5));
88 BOOST_CHECK_EQUAL(*cache.Get(5), 5);
89 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
90 BOOST_CHECK(!cache.Exists(0));
91 BOOST_CHECK(cache.Exists(5));
93 BOOST_CHECK_EQUAL(*cache.Get(6), 6);
94 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
95 BOOST_CHECK(!cache.Exists(0));
96 BOOST_CHECK(!cache.Exists(1));
97 BOOST_CHECK(cache.Exists(6));
100 BOOST_CHECK_EQUAL(*cache.Get(6), 66);
101 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
102 BOOST_CHECK(!cache.Exists(0));
103 BOOST_CHECK(!cache.Exists(1));
104 BOOST_CHECK(cache.Exists(6));
109 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
110 for (
int i = 0; i < 5; ++i) {
111 cache.Set(i, std::make_shared<int>(i));
112 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
113 BOOST_CHECK(cache.Exists(i));
116 BOOST_CHECK_EQUAL(*cache.Get(5), -1);
117 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
118 BOOST_CHECK(!cache.Exists(0));
119 BOOST_CHECK(cache.Exists(5));
121 BOOST_CHECK_EQUAL(*cache.Get(6), -1);
122 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
123 BOOST_CHECK(!cache.Exists(0));
124 BOOST_CHECK(!cache.Exists(1));
125 BOOST_CHECK(cache.Exists(6));
130 5, [](
const int key) {
return std::make_shared<int>(key); });
131 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
132 for (
int i = 0; i < 5; ++i) {
133 BOOST_CHECK_EQUAL(*cache.Get(i), i);
134 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
135 BOOST_CHECK(cache.Exists(i));
138 BOOST_CHECK_EQUAL(*cache.Get(5), 5);
139 BOOST_CHECK_EQUAL(cache.NumElems(), 5);
140 BOOST_CHECK(!cache.Exists(0));
141 BOOST_CHECK(cache.Exists(5));
144 BOOST_CHECK_EQUAL(cache.NumElems(), 4);
146 BOOST_CHECK_EQUAL(cache.NumElems(), 3);
148 BOOST_CHECK_EQUAL(cache.NumElems(), 2);
150 BOOST_CHECK_EQUAL(cache.NumElems(), 1);
152 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
154 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
159 5, [](
const int key) {
return std::make_shared<int>(key); });
160 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
161 for (
int i = 0; i < 5; ++i) {
162 BOOST_CHECK_EQUAL(*cache.Get(i), i);
163 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
164 BOOST_CHECK(cache.Exists(i));
168 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
170 BOOST_CHECK_EQUAL(*cache.Get(0), 0);
171 BOOST_CHECK_EQUAL(cache.NumElems(), 1);
172 BOOST_CHECK(cache.Exists(0));
176 SizedElem(
const size_t num_bytes_) : num_bytes(num_bytes_) {}
183 5, [](
const int key) {
return std::make_shared<SizedElem>(key); });
184 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
185 BOOST_CHECK_EQUAL(cache.MaxNumElems(), std::numeric_limits<size_t>::max());
186 BOOST_CHECK_EQUAL(cache.NumBytes(), 0);
187 BOOST_CHECK_EQUAL(cache.MaxNumBytes(), 5);
192 10, [](
const int key) {
return std::make_shared<SizedElem>(key); });
193 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
194 for (
int i = 0; i < 5; ++i) {
195 BOOST_CHECK_EQUAL(cache.Get(i)->NumBytes(), i);
196 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
197 BOOST_CHECK(cache.Exists(i));
200 BOOST_CHECK_EQUAL(cache.Get(5)->NumBytes(), 5);
201 BOOST_CHECK_EQUAL(cache.NumElems(), 2);
202 BOOST_CHECK_EQUAL(cache.NumBytes(), 9);
203 BOOST_CHECK(!cache.Exists(0));
204 BOOST_CHECK(cache.Exists(5));
206 BOOST_CHECK_EQUAL(cache.Get(5)->NumBytes(), 5);
207 BOOST_CHECK_EQUAL(cache.NumElems(), 2);
208 BOOST_CHECK_EQUAL(cache.NumBytes(), 9);
209 BOOST_CHECK(!cache.Exists(0));
210 BOOST_CHECK(cache.Exists(5));
212 BOOST_CHECK_EQUAL(cache.Get(6)->NumBytes(), 6);
213 BOOST_CHECK_EQUAL(cache.NumElems(), 1);
214 BOOST_CHECK_EQUAL(cache.NumBytes(), 6);
215 BOOST_CHECK(!cache.Exists(0));
216 BOOST_CHECK(!cache.Exists(1));
217 BOOST_CHECK(cache.Exists(6));
219 BOOST_CHECK_EQUAL(cache.Get(1)->NumBytes(), 1);
220 BOOST_CHECK_EQUAL(cache.NumElems(), 2);
221 BOOST_CHECK_EQUAL(cache.NumBytes(), 7);
222 BOOST_CHECK(!cache.Exists(0));
223 BOOST_CHECK(cache.Exists(1));
224 BOOST_CHECK(cache.Exists(6));
229 10, [](
const int key) {
return std::make_shared<SizedElem>(key); });
230 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
231 for (
int i = 0; i < 5; ++i) {
232 BOOST_CHECK_EQUAL(cache.Get(i)->NumBytes(), i);
233 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
234 BOOST_CHECK(cache.Exists(i));
238 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
239 BOOST_CHECK_EQUAL(cache.NumBytes(), 0);
241 BOOST_CHECK_EQUAL(cache.Get(1)->NumBytes(), 1);
242 BOOST_CHECK_EQUAL(cache.NumBytes(), 1);
243 BOOST_CHECK_EQUAL(cache.NumElems(), 1);
244 BOOST_CHECK(cache.Exists(1));
249 50, [](
const int key) {
return std::make_shared<SizedElem>(key); });
250 BOOST_CHECK_EQUAL(cache.NumElems(), 0);
251 for (
int i = 0; i < 5; ++i) {
252 BOOST_CHECK_EQUAL(cache.Get(i)->NumBytes(), i);
253 BOOST_CHECK_EQUAL(cache.NumElems(), i + 1);
254 BOOST_CHECK(cache.Exists(i));
257 BOOST_CHECK_EQUAL(cache.NumBytes(), 10);
259 cache.Get(4)->num_bytes = 3;
260 BOOST_CHECK_EQUAL(cache.NumBytes(), 10);
261 cache.UpdateNumBytes(4);
262 BOOST_CHECK_EQUAL(cache.NumBytes(), 9);
264 cache.Get(2)->num_bytes = 3;
265 BOOST_CHECK_EQUAL(cache.NumBytes(), 9);
266 cache.UpdateNumBytes(2);
267 BOOST_CHECK_EQUAL(cache.NumBytes(), 10);
269 cache.Get(0)->num_bytes = 40;
270 BOOST_CHECK_EQUAL(cache.NumBytes(), 10);
271 cache.UpdateNumBytes(0);
272 BOOST_CHECK_EQUAL(cache.NumBytes(), 50);
275 BOOST_CHECK_EQUAL(cache.NumBytes(), 0);
276 BOOST_CHECK_EQUAL(cache.Get(2)->NumBytes(), 2);
277 BOOST_CHECK_EQUAL(cache.NumBytes(), 2);
BOOST_AUTO_TEST_CASE(TestLRUCacheEmpty)
SizedElem(const size_t num_bytes_)