Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-11 07:38:55

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
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);  // evicts "a" (LRU)
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");     // promotes "a" to MRU
0063   c.put("c", 3);  // evicts "b" (now LRU), not "a"
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);  // evicts one
0088   BOOST_CHECK_EQUAL(c.size(), 3u);
0089 }
0090 
0091 BOOST_AUTO_TEST_SUITE_END()