Mercurial > hg > orthanc
comparison UnitTests/MemoryCache.cpp @ 282:915ed24547ea
cache lru policy
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 12 Dec 2012 13:17:42 +0100 |
parents | |
children | c9977db00e1d |
comparison
equal
deleted
inserted
replaced
280:77e526e6fdf8 | 282:915ed24547ea |
---|---|
1 #include "gtest/gtest.h" | |
2 | |
3 #include <memory> | |
4 #include "../Core/IDynamicObject.h" | |
5 #include "../Core/MultiThreading/CacheIndex.h" | |
6 | |
7 | |
8 TEST(CacheIndex, Basic) | |
9 { | |
10 Orthanc::CacheIndex<std::string> r; | |
11 | |
12 r.Add("d"); | |
13 r.Add("a"); | |
14 r.Add("c"); | |
15 r.Add("b"); | |
16 | |
17 r.TagAsMostRecent("a"); | |
18 r.TagAsMostRecent("d"); | |
19 r.TagAsMostRecent("b"); | |
20 r.TagAsMostRecent("c"); | |
21 r.TagAsMostRecent("d"); | |
22 r.TagAsMostRecent("c"); | |
23 | |
24 ASSERT_EQ("a", r.RemoveOldest()); | |
25 ASSERT_EQ("b", r.RemoveOldest()); | |
26 ASSERT_EQ("d", r.RemoveOldest()); | |
27 ASSERT_EQ("c", r.RemoveOldest()); | |
28 | |
29 ASSERT_TRUE(r.IsEmpty()); | |
30 } | |
31 | |
32 | |
33 TEST(CacheIndex, Payload) | |
34 { | |
35 Orthanc::CacheIndex<std::string, int> r; | |
36 | |
37 r.Add("a", 420); | |
38 r.Add("b", 421); | |
39 r.Add("c", 422); | |
40 r.Add("d", 423); | |
41 | |
42 r.TagAsMostRecent("a"); | |
43 r.TagAsMostRecent("d"); | |
44 r.TagAsMostRecent("b"); | |
45 r.TagAsMostRecent("c"); | |
46 r.TagAsMostRecent("d"); | |
47 r.TagAsMostRecent("c"); | |
48 | |
49 ASSERT_TRUE(r.Contains("b")); | |
50 ASSERT_EQ(421, r.Invalidate("b")); | |
51 ASSERT_FALSE(r.Contains("b")); | |
52 | |
53 int p; | |
54 ASSERT_EQ("a", r.RemoveOldest(p)); ASSERT_EQ(420, p); | |
55 ASSERT_EQ("d", r.RemoveOldest(p)); ASSERT_EQ(423, p); | |
56 ASSERT_EQ("c", r.RemoveOldest(p)); ASSERT_EQ(422, p); | |
57 | |
58 ASSERT_TRUE(r.IsEmpty()); | |
59 } | |
60 | |
61 | |
62 namespace Orthanc | |
63 { | |
64 class MemoryCache | |
65 { | |
66 private: | |
67 struct CacheElement | |
68 { | |
69 std::string id_; | |
70 std::auto_ptr<IDynamicObject> object_; | |
71 }; | |
72 | |
73 //typedef std::map<CacheElement | |
74 | |
75 size_t places_; | |
76 CacheIndex<const char*> index_; | |
77 | |
78 public: | |
79 | |
80 }; | |
81 } |