File indexing completed on 2026-07-11 07:38:55
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <boost/test/unit_test.hpp>
0010
0011 #include "Acts/Utilities/detail/LruCache.hpp"
0012
0013 #include <string>
0014
0015 namespace {
0016 using Cache = Acts::detail::LruCache<std::string, int>;
0017 }
0018
0019 BOOST_AUTO_TEST_SUITE(LruCacheTests)
0020
0021 BOOST_AUTO_TEST_CASE(ZeroCapacityThrows) {
0022 BOOST_CHECK_THROW(Cache{0}, std::invalid_argument);
0023 }
0024
0025 BOOST_AUTO_TEST_CASE(MissReturnsNullopt) {
0026 Cache c{2};
0027 BOOST_CHECK(!c.get("x").has_value());
0028 }
0029
0030 BOOST_AUTO_TEST_CASE(PutAndGet) {
0031 Cache c{2};
0032 c.put("a", 1);
0033 auto v = c.get("a");
0034 BOOST_REQUIRE(v.has_value());
0035 BOOST_CHECK_EQUAL(*v, 1);
0036 BOOST_CHECK_EQUAL(c.size(), 1u);
0037 }
0038
0039 BOOST_AUTO_TEST_CASE(UpdateExistingKey) {
0040 Cache c{2};
0041 c.put("a", 1);
0042 c.put("a", 99);
0043 BOOST_CHECK_EQUAL(*c.get("a"), 99);
0044 BOOST_CHECK_EQUAL(c.size(), 1u);
0045 }
0046
0047 BOOST_AUTO_TEST_CASE(EvictsLRU) {
0048 Cache c{2};
0049 c.put("a", 1);
0050 c.put("b", 2);
0051 c.put("c", 3);
0052 BOOST_CHECK(!c.get("a").has_value());
0053 BOOST_CHECK_EQUAL(*c.get("b"), 2);
0054 BOOST_CHECK_EQUAL(*c.get("c"), 3);
0055 BOOST_CHECK_EQUAL(c.size(), 2u);
0056 }
0057
0058 BOOST_AUTO_TEST_CASE(GetPromotesToMRU) {
0059 Cache c{2};
0060 c.put("a", 1);
0061 c.put("b", 2);
0062 c.get("a");
0063 c.put("c", 3);
0064 BOOST_CHECK_EQUAL(*c.get("a"), 1);
0065 BOOST_CHECK(!c.get("b").has_value());
0066 BOOST_CHECK_EQUAL(*c.get("c"), 3);
0067 }
0068
0069 BOOST_AUTO_TEST_CASE(CapacityOne) {
0070 Cache c{1};
0071 c.put("a", 1);
0072 c.put("b", 2);
0073 BOOST_CHECK(!c.get("a").has_value());
0074 BOOST_CHECK_EQUAL(*c.get("b"), 2);
0075 BOOST_CHECK_EQUAL(c.size(), 1u);
0076 }
0077
0078 BOOST_AUTO_TEST_CASE(SizeAndCapacity) {
0079 Cache c{3};
0080 BOOST_CHECK_EQUAL(c.capacity(), 3u);
0081 BOOST_CHECK_EQUAL(c.size(), 0u);
0082 c.put("a", 1);
0083 BOOST_CHECK_EQUAL(c.size(), 1u);
0084 c.put("b", 2);
0085 c.put("c", 3);
0086 BOOST_CHECK_EQUAL(c.size(), 3u);
0087 c.put("d", 4);
0088 BOOST_CHECK_EQUAL(c.size(), 3u);
0089 }
0090
0091 BOOST_AUTO_TEST_SUITE_END()