comparison UnitTests/MemoryCache.cpp @ 546:0e510ea3de31 laaw

merge mainline -> laaw
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 13 Sep 2013 11:25:08 +0200
parents 3b735fdf320b
children
comparison
equal deleted inserted replaced
543:fe796b053863 546:0e510ea3de31
6 #include <boost/lexical_cast.hpp> 6 #include <boost/lexical_cast.hpp>
7 #include "../Core/IDynamicObject.h" 7 #include "../Core/IDynamicObject.h"
8 #include "../Core/Cache/MemoryCache.h" 8 #include "../Core/Cache/MemoryCache.h"
9 9
10 10
11 TEST(CacheIndex, Basic) 11 TEST(LRU, Basic)
12 { 12 {
13 Orthanc::CacheIndex<std::string> r; 13 Orthanc::LeastRecentlyUsedIndex<std::string> r;
14 14
15 r.Add("d"); 15 r.Add("d");
16 r.Add("a"); 16 r.Add("a");
17 r.Add("c"); 17 r.Add("c");
18 r.Add("b"); 18 r.Add("b");
19 19
20 r.TagAsMostRecent("a"); 20 r.MakeMostRecent("a");
21 r.TagAsMostRecent("d"); 21 r.MakeMostRecent("d");
22 r.TagAsMostRecent("b"); 22 r.MakeMostRecent("b");
23 r.TagAsMostRecent("c"); 23 r.MakeMostRecent("c");
24 r.TagAsMostRecent("d"); 24 r.MakeMostRecent("d");
25 r.TagAsMostRecent("c"); 25 r.MakeMostRecent("c");
26 26
27 ASSERT_EQ("a", r.GetOldest());
27 ASSERT_EQ("a", r.RemoveOldest()); 28 ASSERT_EQ("a", r.RemoveOldest());
29 ASSERT_EQ("b", r.GetOldest());
28 ASSERT_EQ("b", r.RemoveOldest()); 30 ASSERT_EQ("b", r.RemoveOldest());
31 ASSERT_EQ("d", r.GetOldest());
29 ASSERT_EQ("d", r.RemoveOldest()); 32 ASSERT_EQ("d", r.RemoveOldest());
33 ASSERT_EQ("c", r.GetOldest());
30 ASSERT_EQ("c", r.RemoveOldest()); 34 ASSERT_EQ("c", r.RemoveOldest());
31 35
32 ASSERT_TRUE(r.IsEmpty()); 36 ASSERT_TRUE(r.IsEmpty());
37
38 ASSERT_THROW(r.GetOldest(), Orthanc::OrthancException);
39 ASSERT_THROW(r.RemoveOldest(), Orthanc::OrthancException);
33 } 40 }
34 41
35 42
36 TEST(CacheIndex, Payload) 43 TEST(LRU, Payload)
37 { 44 {
38 Orthanc::CacheIndex<std::string, int> r; 45 Orthanc::LeastRecentlyUsedIndex<std::string, int> r;
39 46
40 r.Add("a", 420); 47 r.Add("a", 420);
41 r.Add("b", 421); 48 r.Add("b", 421);
42 r.Add("c", 422); 49 r.Add("c", 422);
43 r.Add("d", 423); 50 r.Add("d", 423);
44 51
45 r.TagAsMostRecent("a"); 52 r.MakeMostRecent("a");
46 r.TagAsMostRecent("d"); 53 r.MakeMostRecent("d");
47 r.TagAsMostRecent("b"); 54 r.MakeMostRecent("b");
48 r.TagAsMostRecent("c"); 55 r.MakeMostRecent("c");
49 r.TagAsMostRecent("d"); 56 r.MakeMostRecent("d");
50 r.TagAsMostRecent("c"); 57 r.MakeMostRecent("c");
51 58
52 ASSERT_TRUE(r.Contains("b")); 59 ASSERT_TRUE(r.Contains("b"));
53 ASSERT_EQ(421, r.Invalidate("b")); 60 ASSERT_EQ(421, r.Invalidate("b"));
54 ASSERT_FALSE(r.Contains("b")); 61 ASSERT_FALSE(r.Contains("b"));
55 62
56 int p; 63 int p;
57 ASSERT_TRUE(r.Contains("a", p)); ASSERT_EQ(420, p); 64 ASSERT_TRUE(r.Contains("a", p)); ASSERT_EQ(420, p);
58 ASSERT_TRUE(r.Contains("c", p)); ASSERT_EQ(422, p); 65 ASSERT_TRUE(r.Contains("c", p)); ASSERT_EQ(422, p);
59 ASSERT_TRUE(r.Contains("d", p)); ASSERT_EQ(423, p); 66 ASSERT_TRUE(r.Contains("d", p)); ASSERT_EQ(423, p);
60 67
68 ASSERT_EQ("a", r.GetOldest());
69 ASSERT_EQ(420, r.GetOldestPayload());
61 ASSERT_EQ("a", r.RemoveOldest(p)); ASSERT_EQ(420, p); 70 ASSERT_EQ("a", r.RemoveOldest(p)); ASSERT_EQ(420, p);
71
72 ASSERT_EQ("d", r.GetOldest());
73 ASSERT_EQ(423, r.GetOldestPayload());
62 ASSERT_EQ("d", r.RemoveOldest(p)); ASSERT_EQ(423, p); 74 ASSERT_EQ("d", r.RemoveOldest(p)); ASSERT_EQ(423, p);
75
76 ASSERT_EQ("c", r.GetOldest());
77 ASSERT_EQ(422, r.GetOldestPayload());
63 ASSERT_EQ("c", r.RemoveOldest(p)); ASSERT_EQ(422, p); 78 ASSERT_EQ("c", r.RemoveOldest(p)); ASSERT_EQ(422, p);
79
80 ASSERT_TRUE(r.IsEmpty());
81 }
82
83
84 TEST(LRU, PayloadUpdate)
85 {
86 Orthanc::LeastRecentlyUsedIndex<std::string, int> r;
87
88 r.Add("a", 420);
89 r.Add("b", 421);
90 r.Add("d", 423);
91
92 r.MakeMostRecent("a", 424);
93 r.MakeMostRecent("d", 421);
94
95 ASSERT_EQ("b", r.GetOldest());
96 ASSERT_EQ(421, r.GetOldestPayload());
97 r.RemoveOldest();
98
99 ASSERT_EQ("a", r.GetOldest());
100 ASSERT_EQ(424, r.GetOldestPayload());
101 r.RemoveOldest();
102
103 ASSERT_EQ("d", r.GetOldest());
104 ASSERT_EQ(421, r.GetOldestPayload());
105 r.RemoveOldest();
106
107 ASSERT_TRUE(r.IsEmpty());
108 }
109
110
111
112 TEST(LRU, PayloadUpdateBis)
113 {
114 Orthanc::LeastRecentlyUsedIndex<std::string, int> r;
115
116 r.AddOrMakeMostRecent("a", 420);
117 r.AddOrMakeMostRecent("b", 421);
118 r.AddOrMakeMostRecent("d", 423);
119 r.AddOrMakeMostRecent("a", 424);
120 r.AddOrMakeMostRecent("d", 421);
121
122 ASSERT_EQ("b", r.GetOldest());
123 ASSERT_EQ(421, r.GetOldestPayload());
124 r.RemoveOldest();
125
126 ASSERT_EQ("a", r.GetOldest());
127 ASSERT_EQ(424, r.GetOldestPayload());
128 r.RemoveOldest();
129
130 ASSERT_EQ("d", r.GetOldest());
131 ASSERT_EQ(421, r.GetOldestPayload());
132 r.RemoveOldest();
64 133
65 ASSERT_TRUE(r.IsEmpty()); 134 ASSERT_TRUE(r.IsEmpty());
66 } 135 }
67 136
68 137