GCC Code Coverage Report


Directory: ./
File: src/util/config-helpers.test.cc
Date: 2025-09-01 06:19:01
Exec Total Coverage
Lines: 350 350 100.0%
Functions: 84 84 100.0%
Branches: 518 843 61.4%

Line Branch Exec Source
1 #include "na64util/config-helpers.hh"
2
3 #include <gtest/gtest.h>
4 #include <memory>
5
6 namespace na64dp {
7 namespace test {
8
9 //
10 // Path
11
12 const char gBadPaths[][64] = {
13 "[]", ".", "[", "]", "..", ".[]", "foo.[12]", "foo[bar]",
14 "foo.[112]", "foo.bar[12.34]", "one..two.three", ".",
15 "2abc", "2.abc", "[12.abc]", "*[*]*.*", ".abc", "[12a]",
16 "foo[**]", "bar-12]",
17 ""
18 };
19
20 8 TEST(RConfigHelpers, PathHandlesErrors) {
21
2/2
✓ Branch 0 taken 20 times.
✓ Branch 1 taken 1 times.
42 for(auto path = gBadPaths; '\0' != **path; ++path) {
22 na64dp::util::pdef::Path * p;
23
8/15
✓ Branch 2 taken 20 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 20 times.
✓ Branch 7 taken 20 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 20 times.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 20 times.
✓ Branch 31 taken 20 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 20 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 39 taken 20 times.
80 EXPECT_THROW( p = new na64dp::util::pdef::Path(*path)
24 , na64dp::errors::BadPath )
25 40 << "Didn't detect error at \"" << *path << "\"";
26 40 p = nullptr;
27
1/2
✗ Branch 2 not taken.
✓ Branch 3 taken 20 times.
40 EXPECT_FALSE(p);
28 }
29 2 }
30
31 8 TEST(RConfigHelpers, PathParsesStringKeyOneLetter) {
32
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("a");
33
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(1, p.size());
34 2 auto & ptok = p[0];
35
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.type, na64dp::util::pdef::PathToken::kStrKey);
36
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok.pl.stringKey, "a");
37 2 }
38
39 8 TEST(RConfigHelpers, PathParsesSingleIndex) {
40
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("[-1]");
41
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(1, p.size());
42 2 auto & ptok = p[0];
43
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.type, na64dp::util::pdef::PathToken::kIntKey);
44
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.pl.index, -1);
45 2 }
46
47 8 TEST(RConfigHelpers, PathParsesStringKeyMultiLetter) {
48
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("abc");
49
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(1, p.size());
50 2 auto & ptok = p[0];
51
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.type, na64dp::util::pdef::PathToken::kStrKey);
52
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok.pl.stringKey, "abc");
53 2 }
54
55 8 TEST(RConfigHelpers, PathParsesStringKeysChain) {
56
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("abc.bca.z");
57
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(3, p.size());
58
59 2 auto & ptok1 = p[0];
60
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kStrKey);
61
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok1.pl.stringKey, "abc");
62
63 2 auto & ptok2 = p[1];
64
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kStrKey);
65
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok2.pl.stringKey, "bca");
66
67 2 auto & ptok3 = p[2];
68
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kStrKey);
69
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok3.pl.stringKey, "z");
70 2 }
71
72 8 TEST(RConfigHelpers, PathParsesIntsKeysChain) {
73
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("[20][-2][12]");
74
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(3, p.size());
75
76 2 auto & ptok1 = p[0];
77
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kIntKey);
78
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.pl.index, 20);
79
80 2 auto & ptok2 = p[1];
81
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kIntKey);
82
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.pl.index, -2);
83
84 2 auto & ptok3 = p[2];
85
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kIntKey);
86
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.pl.index, 12);
87 2 }
88
89 8 TEST(RConfigHelpers, PathParsesSingleAnyIndex) {
90
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("[*]");
91
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(1, p.size());
92 2 auto & ptok = p[0];
93
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.type, na64dp::util::pdef::PathToken::kAnyIndex);
94 2 }
95
96 8 TEST(RConfigHelpers, PathParsesSingleAnyKey) {
97
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("*");
98
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(1, p.size());
99 2 auto & ptok = p[0];
100
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok.type, na64dp::util::pdef::PathToken::kAnyStrKey);
101 2 }
102
103 8 TEST(RConfigHelpers, PathParsesChainedAnyStrKeys) {
104
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("*.*.*");
105
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(3, p.size());
106
107
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 1);
108 2 auto & ptok1 = p[0];
109
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kAnyStrKey);
110
111
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 2);
112 2 auto & ptok2 = p[1];
113
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kAnyStrKey);
114
115
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 3);
116 2 auto & ptok3 = p[2];
117
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kAnyStrKey);
118 2 }
119
120 8 TEST(RConfigHelpers, PathParsesChainedAnyIndexKeys) {
121
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("[*][*][*]");
122
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(3, p.size());
123
124
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 1);
125 2 auto & ptok1 = p[0];
126
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kAnyIndex);
127
128
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 2);
129 2 auto & ptok2 = p[1];
130
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kAnyIndex);
131
132
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 3);
133 2 auto & ptok3 = p[2];
134
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kAnyIndex);
135 2 }
136
137 8 TEST(RConfigHelpers, PathParsesChainedAnyKeys) {
138
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("*[*].*.*");
139
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(4, p.size());
140
141
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 1);
142 2 auto & ptok1 = p[0];
143
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kAnyStrKey);
144
145
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 2);
146 2 auto & ptok2 = p[1];
147
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kAnyIndex);
148
149
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 3);
150 2 auto & ptok3 = p[2];
151
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kAnyStrKey);
152
153
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 4);
154 2 auto & ptok4 = p[3];
155
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok4.type, na64dp::util::pdef::PathToken::kAnyStrKey);
156 2 }
157
158 8 TEST(RConfigHelpers, PathParsesChainedMixedKeys) {
159
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p("one[*].foo[*][*].*.bar.*.zum[-12]");
160
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(10, p.size());
161
162
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 1); // one
163 2 auto & ptok1 = p[0];
164
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok1.type, na64dp::util::pdef::PathToken::kStrKey);
165
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok1.pl.stringKey, "one");
166
167
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 2); // [*]
168 2 auto & ptok2 = p[1];
169
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok2.type, na64dp::util::pdef::PathToken::kAnyIndex);
170
171
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 3); // foo
172 2 auto & ptok3 = p[2];
173
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok3.type, na64dp::util::pdef::PathToken::kStrKey);
174
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok3.pl.stringKey, "foo");
175
176
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 4); // [*]
177 2 auto & ptok4 = p[3];
178
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok4.type, na64dp::util::pdef::PathToken::kAnyIndex);
179
180
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 5); // [*]
181 2 auto & ptok5 = p[4];
182
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok5.type, na64dp::util::pdef::PathToken::kAnyIndex);
183
184
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 6); // *
185 2 auto & ptok6 = p[5];
186
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok6.type, na64dp::util::pdef::PathToken::kAnyStrKey);
187
188
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 7); // bar
189 2 auto & ptok7 = p[6];
190
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok7.type, na64dp::util::pdef::PathToken::kStrKey);
191
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok7.pl.stringKey, "bar");
192
193
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 8); // *
194 2 auto & ptok8 = p[7];
195
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok8.type, na64dp::util::pdef::PathToken::kAnyStrKey);
196
197
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 9); // zum
198 2 auto & ptok9 = p[8];
199
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok9.type, na64dp::util::pdef::PathToken::kStrKey);
200
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_STREQ(ptok9.pl.stringKey, "zum");
201
202
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_GE(p.size(), 10); // -12
203 2 auto & ptok10 = p[9];
204
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok10.type, na64dp::util::pdef::PathToken::kIntKey);
205
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(ptok10.pl.index, -12);
206 2 }
207
208 8 TEST(RConfigHelpers, PathRestoresItselfFromString) {
209
1/1
✓ Branch 1 taken 1 times.
2 const std::string origPath = "one[*].foo[*][*].*.bar.*.zum[-12]";
210
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p(origPath);
211
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(10, p.size());
212
1/1
✓ Branch 1 taken 1 times.
4 std::string asString = p.to_string();
213
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(origPath, asString);
214 2 }
215
216 8 TEST(RConfigHelpers, AssignmentOperatorWorks) {
217
1/1
✓ Branch 1 taken 1 times.
2 const std::string origPath = "one[*].foo[*][*].*.bar.*.zum[-12]";
218
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path copy;
219 {
220
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path p(origPath);
221
2/3
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
2 EXPECT_EQ(10, p.size());
222
1/1
✓ Branch 1 taken 1 times.
2 copy = p;
223 2 }
224
1/1
✓ Branch 1 taken 1 times.
4 std::string asString = copy.to_string();
225
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(origPath, asString);
226 2 }
227
228 8 TEST(RConfigHelpers, CopyCtrWorks) {
229
1/1
✓ Branch 1 taken 1 times.
2 const std::string origPath = "one[*].foo[*][*].*.bar.*.zum[-12]";
230
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path orig(origPath);
231
1/1
✓ Branch 1 taken 1 times.
2 na64dp::util::pdef::Path copy(orig);
232
1/1
✓ Branch 1 taken 1 times.
2 std::string asString = copy.to_string();
233
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(origPath, asString);
234 2 }
235
236 //
237 // Scalars
238
239 8 TEST(RConfigHelpers, NumericInRangeScalarValidatorWorks) {
240 2 util::pdef::Scalar<int> intPar;
241 std::shared_ptr<util::pdef::RangeValidator<int>> vv
242
1/1
✓ Branch 1 taken 1 times.
2 = std::make_shared<util::pdef::RangeValidator<int>>();
243 2 vv->left = -1;
244 2 vv->right = 10;
245 2 intPar.set_validator(vv);
246
247
7/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✓ Branch 37 taken 1 times.
2 ASSERT_THROW(intPar.set(-2), errors::InvalidParameterValue );
248
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(intPar.is_set());
249
250
7/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✓ Branch 37 taken 1 times.
2 ASSERT_THROW(intPar.set(11), errors::InvalidParameterValue );
251
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(intPar.is_set());
252
253
1/1
✓ Branch 1 taken 1 times.
2 intPar.set(0);
254
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(intPar.is_set());
255
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
2 EXPECT_EQ(intPar.get(), 0);
256 2 }
257
258 8 TEST(RConfigHelpers, NumericLEScalarValidatorWorks) {
259 2 util::pdef::Scalar<int> intPar;
260 std::shared_ptr<util::pdef::RangeValidator<int>> vv
261
1/1
✓ Branch 1 taken 1 times.
2 = std::make_shared<util::pdef::RangeValidator<int>>();
262 2 vv->right = 10;
263 2 intPar.set_validator(vv);
264
265
7/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✓ Branch 37 taken 1 times.
2 ASSERT_THROW(intPar.set(11), errors::InvalidParameterValue );
266
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(intPar.is_set());
267
268
1/1
✓ Branch 1 taken 1 times.
2 intPar.set(10);
269
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(intPar.is_set());
270
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
2 EXPECT_EQ(intPar.get(), 10);
271 2 }
272
273 8 TEST(RConfigHelpers, NumericGEScalarValidatorWorks) {
274 2 util::pdef::Scalar<int> intPar;
275 std::shared_ptr<util::pdef::RangeValidator<int>> vv
276
1/1
✓ Branch 1 taken 1 times.
2 = std::make_shared<util::pdef::RangeValidator<int>>();
277 2 vv->left = -10;
278 2 intPar.set_validator(vv);
279
280
7/14
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✓ Branch 32 taken 1 times.
✗ Branch 33 not taken.
✗ Branch 34 not taken.
✓ Branch 37 taken 1 times.
2 ASSERT_THROW(intPar.set(-11), errors::InvalidParameterValue );
281
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(intPar.is_set());
282
283
1/1
✓ Branch 1 taken 1 times.
2 intPar.set(-10);
284
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(intPar.is_set());
285
3/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
2 EXPECT_EQ(intPar.get(), -10);
286 2 }
287
288 //
289 // Nodes
290
291 8 TEST(RConfigHelpers, NodeDefaultStateUnset) {
292 2 util::pdef::Node node;
293
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_array());
294
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_custom());
295
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_scalar());
296
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_section());
297 2 }
298
299 // - scalar
300
301 8 TEST(RConfigHelpers, CreatesScalarNode) {
302 2 util::pdef::Node node;
303
1/1
✓ Branch 1 taken 1 times.
2 auto scalar = node.set_scalar<int>();
304
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_array());
305
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_custom());
306
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(node.is_scalar());
307
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_section());
308
309
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(scalar.is_set());
310
311
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(scalar.get(), errors::ParameterValueIsNotSet);
312 2 }
313
314 8 TEST(RConfigHelpers, ScalarNodeDetectsBadType) {
315 2 util::pdef::Node node;
316
1/1
✓ Branch 1 taken 1 times.
2 auto & scalar = node.set_scalar<int>();
317
318
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.as_section(), errors::InvalidParameterType);
319
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.as_array(), errors::InvalidParameterType);
320
1/1
✓ Branch 1 taken 1 times.
2 auto & scalar2 = node.as_scalar_of_type<int>();
321
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(&scalar, &scalar2);
322
323
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.set_scalar<int>(), errors::NodeRedefinition);
324
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.set_section(), errors::NodeRedefinition);
325
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.set_array(), errors::NodeRedefinition);
326 2 }
327
328 // - section
329
330 8 TEST(RConfigHelpers, CreatesSectionNode) {
331 2 util::pdef::Node node;
332
1/1
✓ Branch 1 taken 1 times.
2 auto & section = node.set_section();
333
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_array());
334
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_custom());
335
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_scalar());
336
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(node.is_section());
337
338
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(section.empty());
339 2 }
340
341 8 TEST(RConfigHelpers, GetSetOfSectionNodeWorks) {
342 2 util::pdef::Node node;
343
1/1
✓ Branch 1 taken 1 times.
2 auto & sectionOrig = node.set_section();
344
1/1
✓ Branch 1 taken 1 times.
2 auto & section = node.as_section();
345
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(&sectionOrig, &section);
346
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(section.empty());
347
348
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.as_scalar(), errors::InvalidParameterType);
349
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.as_scalar_of_type<int>(), errors::InvalidParameterType);
350
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(node.as_array(), errors::InvalidParameterType);
351
352
1/1
✓ Branch 1 taken 1 times.
2 util::pdef::Node * leaf1 = new util::pdef::Node();
353
1/1
✓ Branch 1 taken 1 times.
2 leaf1->set_scalar<int>();
354
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 30 taken 1 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 35 taken 1 times.
2 EXPECT_THROW(leaf1->set_scalar<int>(), errors::NodeRedefinition);
355
356
1/1
✓ Branch 1 taken 1 times.
2 section.emplace("intNode", leaf1);
357
358
1/1
✓ Branch 1 taken 1 times.
2 util::pdef::Node * leaf2 = new util::pdef::Node();
359
1/1
✓ Branch 1 taken 1 times.
2 leaf2->set_scalar<float>();
360
1/1
✓ Branch 1 taken 1 times.
2 section.emplace("floatNode", leaf2);
361
362
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(section.empty());
363
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(section.size(), 2);
364
365
4/4
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 10 taken 1 times.
2 node["intNode"].as_scalar_of_type<int>().set(10);
366
4/5
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
2 EXPECT_EQ(leaf1->as_scalar_of_type<int>().get(), 10);
367 2 }
368
369 // - array
370
371 8 TEST(RConfigHelpers, CreatesArrayNode) {
372 2 util::pdef::Node node;
373
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
2 auto array = node.set_array();
374
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(node.is_array());
375
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_custom());
376
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_scalar());
377
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(node.is_section());
378
379
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(array.empty());
380
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_FALSE(array.topology) << "Topology pointer is set (it shouldn't)";
381 2 }
382
383 8 TEST(RConfigHelpers, GetSetOfArrayNodeWorks) {
384
1/1
✓ Branch 1 taken 1 times.
2 auto node = std::make_shared<util::pdef::Node>();
385
1/1
✓ Branch 2 taken 1 times.
2 auto & arrayOrig = node->set_array();
386
1/1
✓ Branch 2 taken 1 times.
2 auto & array = node->as_array();
387
2/3
✓ Branch 1 taken 1 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2 EXPECT_EQ(&arrayOrig, &array);
388
1/2
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
2 EXPECT_TRUE(array.empty());
389
390
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 36 taken 1 times.
2 EXPECT_THROW(node->as_scalar(), errors::InvalidParameterType);
391
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 36 taken 1 times.
2 EXPECT_THROW(node->as_scalar_of_type<int>(), errors::InvalidParameterType);
392
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 36 taken 1 times.
2 EXPECT_THROW(node->as_section(), errors::InvalidParameterType);
393
394
1/1
✓ Branch 1 taken 1 times.
2 auto leaf1 = std::make_shared<util::pdef::Node>();
395
1/1
✓ Branch 2 taken 1 times.
2 leaf1->set_scalar<int>();
396
6/12
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✓ Branch 31 taken 1 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 36 taken 1 times.
2 EXPECT_THROW(leaf1->set_scalar<int>(), errors::NodeRedefinition);
397
1/1
✓ Branch 1 taken 1 times.
2 array.push_back(leaf1);
398
399
1/1
✓ Branch 1 taken 1 times.
2 auto leaf2 = std::make_shared<util::pdef::Node>();
400
1/1
✓ Branch 2 taken 1 times.
2 leaf2->set_scalar<float>();
401
1/1
✓ Branch 1 taken 1 times.
2 array.push_back(leaf2);
402
403
3/5
✓ Branch 2 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✓ Branch 26 taken 1 times.
✗ Branch 27 not taken.
2 ASSERT_FALSE(node->as_array().empty());
404
4/6
✓ Branch 2 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_EQ(node->as_array().size(), 2);
405
406
7/13
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 11 taken 1 times.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✓ Branch 35 taken 1 times.
✗ Branch 36 not taken.
✗ Branch 37 not taken.
✓ Branch 40 taken 1 times.
6 EXPECT_THROW( (*node)["intNode"]
407 2 , errors::InvalidParameterType );
408
3/4
✓ Branch 3 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
2 EXPECT_EQ( &((*node)[0])
409 , leaf1.get()
410 2 );
411 2 }
412
413 //
414 // Composer
415
416 8 TEST(RConfigHelpers, OneLevelSectionResolvesBasicNodes) {
417 2 util::pdef::Node node;
418
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node.is_unset());
419
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(node.is_section());
420
421
1/1
✓ Branch 1 taken 1 times.
2 util::pdef::Composer nc(node);
422
1/1
✓ Branch 1 taken 1 times.
2 nc.p<int>("one", "Some integer parameter")
423
1/1
✓ Branch 1 taken 1 times.
2 .p<float>("two", "Another parameter of type float")
424 ;
425
426
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node.is_section());
427
428
1/1
✓ Branch 1 taken 1 times.
2 auto & sec = node.as_section();
429
430
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(sec.size(), 2);
431
432
4/6
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_TRUE(node.has("one"));
433
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
2 const util::pdef::Node & node1 = node["one"];
434
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node1.is_scalar());
435
3/5
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(node1.as_scalar_of_type<int>().is_set());
436
437
4/6
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✓ Branch 28 taken 1 times.
✗ Branch 29 not taken.
4 ASSERT_TRUE(node.has("two"));
438
2/2
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 1 times.
2 const util::pdef::Node & node2 = node["two"];
439
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node2.is_scalar());
440
3/5
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(node2.as_scalar_of_type<float>().is_set());
441 2 }
442
443 8 TEST(RConfigHelpers, OneLevelArrayResolvesBasicNodes) {
444 2 util::pdef::Node node;
445
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node.is_unset());
446
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(node.is_array());
447
448
1/1
✓ Branch 1 taken 1 times.
2 util::pdef::Composer nc(node);
449
1/1
✓ Branch 1 taken 1 times.
2 nc.el<int>("Some integer parameter")
450
1/1
✓ Branch 1 taken 1 times.
2 .el<float>("Another parameter of type float")
451 ;
452
453
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node.is_array());
454
455
1/1
✓ Branch 1 taken 1 times.
2 auto & arr = node.as_array();
456
457
3/5
✓ Branch 2 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
2 ASSERT_EQ(arr.size(), 2);
458
459
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_TRUE(node.has(0));
460
1/1
✓ Branch 1 taken 1 times.
2 const util::pdef::Node & node1 = node[0];
461
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node1.is_scalar());
462
3/5
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(node1.as_scalar_of_type<int>().is_set());
463
464
3/5
✓ Branch 1 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✓ Branch 24 taken 1 times.
✗ Branch 25 not taken.
2 ASSERT_TRUE(node.has(1));
465
1/1
✓ Branch 1 taken 1 times.
2 const util::pdef::Node & node2 = node[1];
466
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node2.is_scalar());
467
3/5
✓ Branch 1 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
2 ASSERT_FALSE(node2.as_scalar_of_type<float>().is_set());
468 2 }
469
470 8 TEST(RConfigHelpers, ConfigExample) {
471 2 util::pdef::Node node;
472
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_TRUE(node.is_unset());
473
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(node.is_section());
474
2/4
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 22 taken 1 times.
✗ Branch 23 not taken.
2 ASSERT_FALSE(node.is_array());
475
476
1/1
✓ Branch 1 taken 1 times.
4 util::pdef::Composer nc(node);
477 nc
478
1/1
✓ Branch 1 taken 1 times.
2 .p<std::string>("title", "Histogram name")
479
1/1
✓ Branch 1 taken 1 times.
2 .p<std::string>("description", "Description, with default value")
480 //.value("{quantity} counts")
481
1/1
✓ Branch 1 taken 1 times.
2 .bgn_sub("axis", "Histogram bins and range, example")
482
1/1
✓ Branch 1 taken 1 times.
2 .p<int>("nBins", 10, "Number of bins")
483
1/1
✓ Branch 1 taken 1 times.
2 .p<float>("left", -1, "Axis lower limit")
484
1/1
✓ Branch 1 taken 1 times.
2 .p<float>("right", 1, "Axis upper limit")
485
1/1
✓ Branch 1 taken 1 times.
2 .end_sub("axis")
486 ;
487 2 }
488
489 }
490 }
491
492
493