Belle II Software development
mrucache.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8#include <framework/core/MRUCache.h>
9#include <gtest/gtest.h>
10#include <string>
11
12using namespace std;
13using namespace Belle2;
14
15namespace {
17 TEST(MRUCache, Constructor)
18 {
19 MRUCache<string, string> cache(100);
20 cache.insert("foo", "bar");
21 string result("boo");
22 EXPECT_FALSE(cache.retrieve("foobar", result));
23 EXPECT_EQ(result, "boo");
24 EXPECT_TRUE(cache.retrieve("foo", result));
25 EXPECT_EQ(result, "bar");
26 }
27
29 TEST(MRUCache, InsertRetrieve)
30 {
31 MRUCache<int, int> cache(5);
32 for (int i = 0; i < 10; ++i) {
33 cache.insert(i, -i);
34 }
35
36 EXPECT_EQ(cache.size(), 5u);
37 MRUCache<int, int>::iterator it = cache.begin();
38 for (int i = 9; i >= 5; --i) {
39 EXPECT_EQ(it->first, i);
40 EXPECT_EQ(it->second, -i);
41 ++it;
42 }
43 int var;
44 EXPECT_TRUE(cache.retrieve(5, var));
45 EXPECT_EQ(cache.begin()->first, 5);
46 EXPECT_EQ(cache.begin()->second, -5);
47
48 cache.clear();
49 EXPECT_EQ(cache.size(), 0u);
50 var = -1;
51 EXPECT_FALSE(cache.retrieve(5, var));
52 EXPECT_EQ(var, -1);
53 }
54
56 TEST(MRUCache, Update)
57 {
58 MRUCache<int, int> cache(5);
59 cache.insert(1, 1);
60 int var;
61 EXPECT_EQ(cache.size(), 1u);
62 EXPECT_TRUE(cache.retrieve(1, var));
63 EXPECT_EQ(var, 1);
64 cache.insert(1, 2);
65 EXPECT_EQ(cache.size(), 1u);
66 EXPECT_TRUE(cache.retrieve(1, var));
67 EXPECT_EQ(var, 2);
68 }
69
71 TEST(MRUCache, Statistics)
72 {
73 MRUCache<int, int> cache(1);
74 int var;
75
76 EXPECT_EQ(cache.getHits(), 0u);
77 EXPECT_EQ(cache.getMisses(), 0u);
78 EXPECT_EQ(cache.getOverflows(), 0u);
79
80 cache.retrieve(0, var);
81 EXPECT_EQ(cache.getMisses(), 1u);
82 cache.retrieve(0, var);
83 EXPECT_EQ(cache.getMisses(), 2u);
84
85 cache.insert(0, 0);
86 EXPECT_EQ(cache.getOverflows(), 0u);
87 cache.insert(1, 0);
88 EXPECT_EQ(cache.getOverflows(), 1u);
89 cache.insert(0, 0);
90 EXPECT_EQ(cache.getOverflows(), 2u);
91
92 cache.retrieve(0, var);
93 EXPECT_EQ(cache.getHits(), 1u);
94 cache.retrieve(0, var);
95 EXPECT_EQ(cache.getHits(), 2u);
96
97 cache.clear();
98 EXPECT_EQ(cache.getHits(), 0u);
99 EXPECT_EQ(cache.getMisses(), 0u);
100 EXPECT_EQ(cache.getOverflows(), 0u);
101 }
102} // namespace
Class implementing a generic Most Recently Used cache.
Definition: MRUCache.h:48
container_type::const_iterator iterator
iterator over all cached items, sorted by access: most recent used first
Definition: MRUCache.h:63
Abstract base class for different kinds of events.
STL namespace.