Belle II Software  release-05-01-25
mrucache.cc
1 #include <framework/core/MRUCache.h>
2 #include <gtest/gtest.h>
3 #include <iostream>
4 #include <string>
5 
6 using namespace std;
7 using namespace Belle2;
8 
9 namespace {
11  TEST(MRUCache, Constructor)
12  {
13  MRUCache<string, string> cache(100);
14  cache.insert("foo", "bar");
15  string result("boo");
16  EXPECT_FALSE(cache.retrieve("foobar", result));
17  EXPECT_EQ(result, "boo");
18  EXPECT_TRUE(cache.retrieve("foo", result));
19  EXPECT_EQ(result, "bar");
20  }
21 
23  TEST(MRUCache, InsertRetrieve)
24  {
25  MRUCache<int, int> cache(5);
26  for (int i = 0; i < 10; ++i) {
27  cache.insert(i, -i);
28  }
29 
30  EXPECT_EQ(cache.size(), 5u);
31  MRUCache<int, int>::iterator it = cache.begin();
32  for (int i = 9; i >= 5; --i) {
33  EXPECT_EQ(it->first, i);
34  EXPECT_EQ(it->second, -i);
35  ++it;
36  }
37  int var;
38  EXPECT_TRUE(cache.retrieve(5, var));
39  EXPECT_EQ(cache.begin()->first, 5);
40  EXPECT_EQ(cache.begin()->second, -5);
41 
42  cache.clear();
43  EXPECT_EQ(cache.size(), 0u);
44  var = -1;
45  EXPECT_FALSE(cache.retrieve(5, var));
46  EXPECT_EQ(var, -1);
47  }
48 
50  TEST(MRUCache, Update)
51  {
52  MRUCache<int, int> cache(5);
53  cache.insert(1, 1);
54  int var;
55  EXPECT_EQ(cache.size(), 1u);
56  EXPECT_TRUE(cache.retrieve(1, var));
57  EXPECT_EQ(var, 1);
58  cache.insert(1, 2);
59  EXPECT_EQ(cache.size(), 1u);
60  EXPECT_TRUE(cache.retrieve(1, var));
61  EXPECT_EQ(var, 2);
62  }
63 
65  TEST(MRUCache, Statistics)
66  {
67  MRUCache<int, int> cache(1);
68  int var;
69 
70  EXPECT_EQ(cache.getHits(), 0u);
71  EXPECT_EQ(cache.getMisses(), 0u);
72  EXPECT_EQ(cache.getOverflows(), 0u);
73 
74  cache.retrieve(0, var);
75  EXPECT_EQ(cache.getMisses(), 1u);
76  cache.retrieve(0, var);
77  EXPECT_EQ(cache.getMisses(), 2u);
78 
79  cache.insert(0, 0);
80  EXPECT_EQ(cache.getOverflows(), 0u);
81  cache.insert(1, 0);
82  EXPECT_EQ(cache.getOverflows(), 1u);
83  cache.insert(0, 0);
84  EXPECT_EQ(cache.getOverflows(), 2u);
85 
86  cache.retrieve(0, var);
87  EXPECT_EQ(cache.getHits(), 1u);
88  cache.retrieve(0, var);
89  EXPECT_EQ(cache.getHits(), 2u);
90 
91  cache.clear();
92  EXPECT_EQ(cache.getHits(), 0u);
93  EXPECT_EQ(cache.getMisses(), 0u);
94  EXPECT_EQ(cache.getOverflows(), 0u);
95  }
96 } // namespace
Belle2::MRUCache
Class implementing a generic Most Recently Used cache.
Definition: MRUCache.h:58
Belle2::MRUCache::iterator
container_type::const_iterator iterator
iterator over all cached items, sorted by access: most recent used first
Definition: MRUCache.h:73
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TEST
TEST(TestgetDetectorRegion, TestgetDetectorRegion)
Test Constructors.
Definition: utilityFunctions.cc:18