Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-12-17 02:43:54

0001 #include "catch.hpp"
0002 
0003 #include "PerfTools/AllocMonitor/plugins/mea_AllocMap.h"
0004 
0005 using namespace edm::service::moduleEventAlloc;
0006 
0007 namespace {
0008   void* address(int i) { return reinterpret_cast<void*>(i); }
0009 }  // namespace
0010 
0011 TEST_CASE("Test ema::AllocMap", "[AllocMap]") {
0012   SECTION("empty") {
0013     AllocMap map;
0014     CHECK(map.size() == 0);
0015     CHECK(map.findOffset(nullptr) == 0);
0016     CHECK(map.allocationSizes().empty());
0017   }
0018 
0019   SECTION("insert in order") {
0020     AllocMap map;
0021     map.insert(address(1), 1);
0022     CHECK(map.size() == 1);
0023     CHECK(map.findOffset(address(1)) == 0);
0024     CHECK(map.allocationSizes() == std::vector<std::size_t>({1}));
0025     map.insert(address(2), 2);
0026     CHECK(map.size() == 2);
0027     CHECK(map.findOffset(address(1)) == 0);
0028     CHECK(map.findOffset(address(2)) == 1);
0029     CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 2}));
0030     map.insert(address(3), 3);
0031     CHECK(map.size() == 3);
0032     CHECK(map.findOffset(address(1)) == 0);
0033     CHECK(map.findOffset(address(2)) == 1);
0034     CHECK(map.findOffset(address(3)) == 2);
0035     CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 2, 3}));
0036 
0037     SECTION("missing find in front") { CHECK(map.findOffset(nullptr) == map.size()); }
0038     SECTION("missing find off end") { CHECK(map.findOffset(address(4)) == map.size()); }
0039     SECTION("overwrite value") {
0040       map.insert(address(2), 4);
0041       CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 4, 3}));
0042     }
0043   }
0044   SECTION("insert in reverse order") {
0045     AllocMap map;
0046     map.insert(address(3), 3);
0047     CHECK(map.size() == 1);
0048     CHECK(map.findOffset(address(3)) == 0);
0049     CHECK(map.allocationSizes() == std::vector<std::size_t>({3}));
0050     map.insert(address(2), 2);
0051     CHECK(map.size() == 2);
0052     CHECK(map.findOffset(address(2)) == 0);
0053     CHECK(map.findOffset(address(3)) == 1);
0054     CHECK(map.allocationSizes() == std::vector<std::size_t>({2, 3}));
0055     map.insert(address(1), 1);
0056     CHECK(map.size() == 3);
0057     CHECK(map.findOffset(address(1)) == 0);
0058     CHECK(map.findOffset(address(2)) == 1);
0059     CHECK(map.findOffset(address(3)) == 2);
0060     CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 2, 3}));
0061   }
0062   SECTION("insert in middle") {
0063     AllocMap map;
0064     map.insert(address(1), 1);
0065     CHECK(map.size() == 1);
0066     CHECK(map.findOffset(address(1)) == 0);
0067     CHECK(map.allocationSizes() == std::vector<std::size_t>({1}));
0068     map.insert(address(3), 3);
0069     CHECK(map.size() == 2);
0070     CHECK(map.findOffset(address(1)) == 0);
0071     CHECK(map.findOffset(address(3)) == 1);
0072     CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 3}));
0073     SECTION("missing findOffset") { CHECK(map.findOffset(address(2)) == map.size()); }
0074     map.insert(address(2), 2);
0075     CHECK(map.size() == 3);
0076     CHECK(map.findOffset(address(1)) == 0);
0077     CHECK(map.findOffset(address(2)) == 1);
0078     CHECK(map.findOffset(address(3)) == 2);
0079     CHECK(map.allocationSizes() == std::vector<std::size_t>({1, 2, 3}));
0080   }
0081 }