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