Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-02-27 07:19:50

0001 #include "catch.hpp"
0002 
0003 #include "DataFormats/Provenance/interface/HardwareResourcesDescription.h"
0004 #include "FWCore/Utilities/interface/EDMException.h"
0005 
0006 TEST_CASE("HardwareResourcesDescription", "[HardwareResourcesDescription]") {
0007   SECTION("Construction from empty string") {
0008     CHECK(edm::HardwareResourcesDescription("") == edm::HardwareResourcesDescription());
0009   }
0010 
0011   SECTION("Default construction") {
0012     edm::HardwareResourcesDescription resources;
0013     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0014     CHECK(resources.serialize().empty());
0015   }
0016 
0017   SECTION("Microarchitecture") {
0018     edm::HardwareResourcesDescription resources;
0019     resources.microarchitecture = "x86-64-v3";
0020     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0021   }
0022 
0023   SECTION("CPU models") {
0024     edm::HardwareResourcesDescription resources;
0025     resources.cpuModels = {"Intel something", "AMD something else"};
0026     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0027   }
0028 
0029   SECTION("accelerators") {
0030     edm::HardwareResourcesDescription resources;
0031     resources.selectedAccelerators = {"cpu", "gpu"};
0032     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0033   }
0034 
0035   SECTION("GPU models") {
0036     edm::HardwareResourcesDescription resources;
0037     resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
0038     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0039   }
0040 
0041   SECTION("All fields") {
0042     edm::HardwareResourcesDescription resources;
0043     resources.microarchitecture = "x86-64-v3";
0044     resources.cpuModels = {"Intel something", "AMD something else"};
0045     resources.selectedAccelerators = {"cpu", "gpu"};
0046     resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
0047     CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
0048   }
0049 
0050   SECTION("Serialization has additional things (forward compatibility)") {
0051     edm::HardwareResourcesDescription resources, resources2;
0052     resources.microarchitecture = "x86-64-v3";
0053     resources.cpuModels = {"Intel something", "AMD something else"};
0054     resources.selectedAccelerators = {"cpu", "gpu"};
0055     resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
0056     resources2.microarchitecture = "this";
0057     resources2.cpuModels = {"is"};
0058     resources2.selectedAccelerators = {"something"};
0059     resources2.gpuModels = {"else"};
0060     auto const serial = resources.serialize() + resources2.serialize();
0061     CHECK(edm::HardwareResourcesDescription(serial) == resources);
0062   }
0063 
0064   SECTION("Error cases") {
0065     SECTION("Invalid serialized string") {
0066       CHECK_THROWS_AS(edm::HardwareResourcesDescription("foo"), edm::Exception);
0067 
0068       edm::HardwareResourcesDescription resources;
0069       resources.microarchitecture = "x86-64-v3";
0070       auto serialized = resources.serialize();
0071       SECTION("Last container does not have the delimiter") {
0072         serialized.back() = ',';
0073         CHECK_THROWS_AS(edm::HardwareResourcesDescription(serialized), edm::Exception);
0074       }
0075       SECTION("Too few containers") {
0076         serialized.pop_back();
0077         CHECK_THROWS_AS(edm::HardwareResourcesDescription(serialized), edm::Exception);
0078       }
0079     }
0080   }
0081 }