1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include "catch.hpp"
#include "DataFormats/Provenance/interface/HardwareResourcesDescription.h"
#include "FWCore/Utilities/interface/EDMException.h"
TEST_CASE("HardwareResourcesDescription", "[HardwareResourcesDescription]") {
SECTION("Construction from empty string") {
CHECK(edm::HardwareResourcesDescription("") == edm::HardwareResourcesDescription());
}
SECTION("Default construction") {
edm::HardwareResourcesDescription resources;
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
CHECK(resources.serialize().empty());
}
SECTION("Microarchitecture") {
edm::HardwareResourcesDescription resources;
resources.microarchitecture = "x86-64-v3";
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
}
SECTION("CPU models") {
edm::HardwareResourcesDescription resources;
resources.cpuModels = {"Intel something", "AMD something else"};
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
}
SECTION("accelerators") {
edm::HardwareResourcesDescription resources;
resources.selectedAccelerators = {"cpu", "gpu"};
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
}
SECTION("GPU models") {
edm::HardwareResourcesDescription resources;
resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
}
SECTION("All fields") {
edm::HardwareResourcesDescription resources;
resources.microarchitecture = "x86-64-v3";
resources.cpuModels = {"Intel something", "AMD something else"};
resources.selectedAccelerators = {"cpu", "gpu"};
resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
CHECK(edm::HardwareResourcesDescription(resources.serialize()) == resources);
}
SECTION("Serialization has additional things (forward compatibility)") {
edm::HardwareResourcesDescription resources, resources2;
resources.microarchitecture = "x86-64-v3";
resources.cpuModels = {"Intel something", "AMD something else"};
resources.selectedAccelerators = {"cpu", "gpu"};
resources.gpuModels = {"NVIDIA something", "NVIDIA something else"};
resources2.microarchitecture = "this";
resources2.cpuModels = {"is"};
resources2.selectedAccelerators = {"something"};
resources2.gpuModels = {"else"};
auto const serial = resources.serialize() + resources2.serialize();
CHECK(edm::HardwareResourcesDescription(serial) == resources);
}
SECTION("Error cases") {
SECTION("Invalid serialized string") {
CHECK_THROWS_AS(edm::HardwareResourcesDescription("foo"), edm::Exception);
edm::HardwareResourcesDescription resources;
resources.microarchitecture = "x86-64-v3";
auto serialized = resources.serialize();
SECTION("Last container does not have the delimiter") {
serialized.back() = ',';
CHECK_THROWS_AS(edm::HardwareResourcesDescription(serialized), edm::Exception);
}
SECTION("Too few containers") {
serialized.pop_back();
CHECK_THROWS_AS(edm::HardwareResourcesDescription(serialized), edm::Exception);
}
}
}
}
|