3 #include <gtest/gtest.h>
15 using Ptr = std::shared_ptr<TestObject>;
16 using ConstPtr = std::shared_ptr<const TestObject>;
27 auto clone = std::make_shared<TestObject>();
30 clone->revision_ = revision_;
45 using Ptr = std::shared_ptr<TestObjectSupportsUpdate>;
46 using ConstPtr = std::shared_ptr<const TestObjectSupportsUpdate>;
50 val_1 = pattern->val_1;
51 val_2 = pattern->val_2;
52 revision_ = pattern->revision_;
61 clone->revision_ = revision_;
69 using Ptr = std::shared_ptr<TestObjectSupportsUpdateFailure>;
70 using ConstPtr = std::shared_ptr<const TestObjectSupportsUpdateFailure>;
74 val_1 = pattern->val_1;
75 val_2 = pattern->val_2;
76 revision_ = pattern->revision_;
82 throw std::runtime_error(
"TestObjectSupportsUpdateFailure: clone failed!");
86 TEST(TesseractCloneCacheUnit, WithoutUpdate)
88 auto original = std::make_shared<TestObject>();
91 auto clone_cache = std::make_shared<CloneCache<TestObject>>(original, 3);
92 EXPECT_EQ(clone_cache->getCacheSize(), 3);
93 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 3);
97 auto clone = clone_cache->clone();
98 EXPECT_EQ(original->val_1, clone->val_1);
99 EXPECT_EQ(original->val_2, clone->val_2);
103 auto clone = clone_cache->clone();
106 EXPECT_NE(original->val_1, clone->val_1);
110 auto clone = clone_cache->clone();
112 original->revision_++;
113 EXPECT_NE(original->val_1, clone->val_1);
117 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
118 clone_cache->updateCache();
119 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 3);
123 original->revision_++;
125 clone_cache->updateCache();
126 auto clone = clone_cache->clone();
127 EXPECT_EQ(original->val_1, clone->val_1);
131 original->revision_++;
133 auto clone = clone_cache->clone();
134 EXPECT_EQ(original->val_1, clone->val_1);
137 for (
int i = 0; i < 10; i++)
139 auto clone = clone_cache->clone();
142 EXPECT_EQ(clone_cache->getCacheSize(), 3);
143 clone_cache->setCacheSize(8);
144 EXPECT_EQ(clone_cache->getCacheSize(), 8);
145 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 8);
148 TEST(TesseractCloneCacheUnit, SupportsUpdate)
150 auto original = std::make_shared<TestObjectSupportsUpdate>();
153 auto clone_cache = std::make_shared<CloneCache<TestObjectSupportsUpdate>>(original, 3);
154 EXPECT_EQ(clone_cache->getCacheSize(), 3);
155 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 3);
159 auto clone = clone_cache->clone();
160 EXPECT_EQ(original->val_1, clone->val_1);
161 EXPECT_EQ(original->val_2, clone->val_2);
165 auto clone = clone_cache->clone();
168 EXPECT_NE(original->val_1, clone->val_1);
172 auto clone = clone_cache->clone();
174 original->revision_++;
175 EXPECT_NE(original->val_1, clone->val_1);
177 auto updated_clone = clone_cache->clone();
178 EXPECT_EQ(original->val_1, updated_clone->val_1);
182 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
183 clone_cache->updateCache();
184 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 3);
188 original->revision_++;
190 clone_cache->updateCache();
191 auto clone = clone_cache->clone();
192 EXPECT_EQ(original->val_1, clone->val_1);
196 original->revision_++;
198 auto clone = clone_cache->clone();
199 EXPECT_EQ(original->val_1, clone->val_1);
202 for (
int i = 0; i < 10; i++)
204 auto clone = clone_cache->clone();
207 EXPECT_EQ(clone_cache->getCacheSize(), 3);
208 clone_cache->setCacheSize(8);
209 EXPECT_EQ(clone_cache->getCacheSize(), 8);
210 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 8);
213 TEST(TesseractCloneCacheUnit, SupportsUpdateFailure)
216 std::shared_ptr<TestObjectSupportsUpdate> original;
217 auto clone_cache = std::make_shared<CloneCache<TestObjectSupportsUpdate>>(original, 3);
218 EXPECT_TRUE(clone_cache->clone() ==
nullptr);
219 EXPECT_EQ(clone_cache->getCacheSize(), 3);
220 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
221 clone_cache->updateCache();
222 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
226 auto original = std::make_shared<TestObjectSupportsUpdateFailure>();
229 auto clone_cache = std::make_shared<CloneCache<TestObjectSupportsUpdateFailure>>(original, 3);
230 EXPECT_EQ(clone_cache->getCacheSize(), 3);
231 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
235 EXPECT_TRUE(clone_cache->clone() ==
nullptr);
236 EXPECT_EQ(clone_cache->getCacheSize(), 3);
237 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
241 original->revision_++;
242 EXPECT_EQ(clone_cache->getCacheSize(), 3);
243 EXPECT_EQ(clone_cache->getCurrentCacheSize(), 0);
244 EXPECT_TRUE(clone_cache->clone() ==
nullptr);
248 int main(
int argc,
char** argv)
250 testing::InitGoogleTest(&argc, argv);
252 return RUN_ALL_TESTS();