Mercurial > hg > orthanc
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 |