282
|
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 }
|