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 }