GCC Code Coverage Report


Directory: ./
File: src/iguana/tests/include/TestConfig.h
Date: 2026-01-07 23:30:02
Coverage Exec Excl Total
Lines: 81.1% 77 0 95
Functions: 100.0% 1 0 1
Branches: 44.1% 332 0 752

Line Branch Exec Source
1 // test configuration
2
3 #include <cassert>
4 #include <iguana/algorithms/Algorithm.h>
5
6 3 inline int TestConfig(int test_num, std::string log_level)
7 {
8
1/2
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 5 taken 3 times.
3 if(test_num == 0) {
9 fmt::print(stderr, "ERROR: need a test number\n");
10 return 1;
11 }
12 // first, some sanity checks of `ConfigFileReader`
13 3 iguana::ConfigFileReader bad_config("bad_config");
14
2/4
✓ Branch 6 → 7 taken 3 times.
✗ Branch 6 → 1852 not taken.
✓ Branch 7 → 8 taken 3 times.
✗ Branch 7 → 975 not taken.
3 bad_config.AddDirectory("non_existent_directory");
15 try {
16
2/4
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 987 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 981 taken 3 times.
3 bad_config.AddFile("non_existent_file.yaml");
17 }
18
1/2
✗ Branch 987 → 988 not taken.
✓ Branch 987 → 989 taken 3 times.
3 catch(std::exception const& ex) {
19 3 fmt::print("excpected exception thrown when trying to add non-existent file\n");
20 3 }
21
1/2
✓ Branch 21 → 22 taken 3 times.
✗ Branch 21 → 1852 not taken.
3 bad_config.PrintDirectories();
22
23 // then test configuring an algorithm
24
3/6
✓ Branch 22 → 23 taken 3 times.
✗ Branch 22 → 1852 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 994 not taken.
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 3 times.
6 auto algo = iguana::AlgorithmFactory::Create("example::ExampleAlgorithm");
25
4/10
✓ Branch 33 → 34 taken 3 times.
✗ Branch 33 → 1006 not taken.
✓ Branch 34 → 35 taken 3 times.
✗ Branch 34 → 1000 not taken.
✓ Branch 45 → 46 taken 3 times.
✗ Branch 45 → 48 not taken.
✓ Branch 50 → 51 taken 3 times.
✗ Branch 50 → 1848 not taken.
✗ Branch 1006 → 1007 not taken.
✗ Branch 1006 → 1009 not taken.
9 algo->SetOption("log", log_level);
26
3/6
✓ Branch 50 → 51 taken 3 times.
✗ Branch 50 → 1848 not taken.
✓ Branch 51 → 52 taken 3 times.
✗ Branch 51 → 1012 not taken.
✓ Branch 57 → 58 taken 3 times.
✗ Branch 57 → 1848 not taken.
6 algo->SetConfigDirectory("src/iguana/tests"); // must be relative to build directory
27
2/4
✓ Branch 58 → 59 taken 3 times.
✗ Branch 58 → 1018 not taken.
✓ Branch 64 → 65 taken 3 times.
✗ Branch 64 → 1848 not taken.
6 algo->SetConfigFile(fmt::format("test_{}.yaml", test_num));
28
1/2
✓ Branch 64 → 65 taken 3 times.
✗ Branch 64 → 1848 not taken.
3 algo->Start();
29
30
3/4
✓ Branch 65 → 66 taken 1 time.
✓ Branch 65 → 286 taken 1 time.
✓ Branch 65 → 456 taken 1 time.
✗ Branch 65 → 968 not taken.
3 switch(test_num) {
31
32 case 1: {
33 // test `GetOptionScalar`
34
5/10
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 1848 not taken.
✓ Branch 68 → 69 taken 1 time.
✗ Branch 68 → 1030 not taken.
✓ Branch 69 → 70 taken 1 time.
✗ Branch 69 → 1024 not taken.
✗ Branch 70 → 71 not taken.
✓ Branch 70 → 72 taken 1 time.
✓ Branch 78 → 79 taken 1 time.
✗ Branch 78 → 1848 not taken.
3 assert((algo->GetOptionScalar<int>("scalar_int") == 1));
35
5/10
✓ Branch 78 → 79 taken 1 time.
✗ Branch 78 → 1848 not taken.
✓ Branch 80 → 81 taken 1 time.
✗ Branch 80 → 1038 not taken.
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 1032 not taken.
✗ Branch 82 → 83 not taken.
✓ Branch 82 → 84 taken 1 time.
✓ Branch 90 → 91 taken 1 time.
✗ Branch 90 → 1848 not taken.
3 assert((algo->GetOptionScalar<double>("scalar_double") == 2.5));
36
4/8
✓ Branch 90 → 91 taken 1 time.
✗ Branch 90 → 1848 not taken.
✓ Branch 92 → 93 taken 1 time.
✗ Branch 92 → 1046 not taken.
✓ Branch 93 → 94 taken 1 time.
✗ Branch 93 → 1040 not taken.
✗ Branch 94 → 95 not taken.
✓ Branch 94 → 96 taken 1 time.
3 assert((algo->GetOptionScalar<std::string>("scalar_string") == "lizard"));
37 // test `GetOptionVector`
38
6/14
✓ Branch 107 → 108 taken 1 time.
✗ Branch 107 → 1848 not taken.
✓ Branch 108 → 109 taken 1 time.
✗ Branch 108 → 1056 not taken.
✓ Branch 110 → 111 taken 1 time.
✗ Branch 110 → 1054 not taken.
✓ Branch 111 → 112 taken 1 time.
✗ Branch 111 → 1048 not taken.
✗ Branch 112 → 113 not taken.
✓ Branch 112 → 114 taken 1 time.
✓ Branch 123 → 124 taken 1 time.
✗ Branch 123 → 126 not taken.
✗ Branch 1056 → 1057 not taken.
✗ Branch 1056 → 1059 not taken.
3 assert((algo->GetOptionVector<int>("vector_int") == std::vector<int>{1, 2, 3}));
39
6/14
✓ Branch 126 → 127 taken 1 time.
✗ Branch 126 → 1848 not taken.
✓ Branch 127 → 128 taken 1 time.
✗ Branch 127 → 1068 not taken.
✓ Branch 129 → 130 taken 1 time.
✗ Branch 129 → 1066 not taken.
✓ Branch 130 → 131 taken 1 time.
✗ Branch 130 → 1060 not taken.
✗ Branch 139 → 140 not taken.
✓ Branch 139 → 141 taken 1 time.
✓ Branch 150 → 151 taken 1 time.
✗ Branch 150 → 153 not taken.
✗ Branch 1068 → 1069 not taken.
✗ Branch 1068 → 1071 not taken.
4 assert((algo->GetOptionVector<double>("vector_double") == std::vector<double>{1.5, 2.5}));
40
12/28
✓ Branch 154 → 155 taken 4 times.
✗ Branch 154 → 1091 not taken.
✓ Branch 156 → 154 taken 4 times.
✓ Branch 156 → 157 taken 1 time.
✓ Branch 157 → 158 taken 1 time.
✗ Branch 157 → 1082 not taken.
✓ Branch 158 → 159 taken 1 time.
✗ Branch 158 → 1080 not taken.
✓ Branch 160 → 161 taken 1 time.
✗ Branch 160 → 1078 not taken.
✓ Branch 161 → 162 taken 1 time.
✗ Branch 161 → 1072 not taken.
✗ Branch 162 → 163 not taken.
✓ Branch 162 → 164 taken 1 time.
✓ Branch 173 → 174 taken 4 times.
✓ Branch 173 → 180 taken 1 time.
✓ Branch 174 → 175 taken 4 times.
✗ Branch 174 → 177 not taken.
✓ Branch 180 → 181 taken 1 time.
✗ Branch 180 → 1848 not taken.
✗ Branch 1083 → 1084 not taken.
✗ Branch 1083 → 1090 not taken.
✗ Branch 1084 → 1085 not taken.
✗ Branch 1084 → 1087 not taken.
✗ Branch 1092 → 1093 not taken.
✗ Branch 1092 → 1099 not taken.
✗ Branch 1093 → 1094 not taken.
✗ Branch 1093 → 1096 not taken.
11 assert((algo->GetOptionVector<std::string>("vector_string") == std::vector<std::string>{"spider", "bat", "chameleon", "spider"}));
41 // test `GetOptionSet`
42
4/8
✓ Branch 180 → 181 taken 1 time.
✗ Branch 180 → 1848 not taken.
✓ Branch 182 → 183 taken 1 time.
✗ Branch 182 → 1106 not taken.
✓ Branch 183 → 184 taken 1 time.
✗ Branch 183 → 1100 not taken.
✗ Branch 190 → 191 not taken.
✓ Branch 190 → 192 taken 1 time.
3 auto s = algo->GetOptionSet<std::string>("vector_string");
43
1/2
✗ Branch 190 → 191 not taken.
✓ Branch 190 → 192 taken 1 time.
1 assert((s.size() == 3));
44
2/4
✓ Branch 192 → 193 taken 1 time.
✗ Branch 192 → 1205 not taken.
✗ Branch 193 → 194 not taken.
✓ Branch 193 → 195 taken 1 time.
1 assert((s.find("spider") != s.end()));
45
3/6
✓ Branch 200 → 201 taken 1 time.
✗ Branch 200 → 1205 not taken.
✗ Branch 201 → 202 not taken.
✓ Branch 201 → 203 taken 1 time.
✓ Branch 208 → 209 taken 1 time.
✗ Branch 208 → 1116 not taken.
2 assert((s.find("bee") == s.end()));
46 // test empty access - expect exceptions, so just catch them and do nothing
47 try {
48
3/6
✓ Branch 208 → 209 taken 1 time.
✗ Branch 208 → 1116 not taken.
✓ Branch 210 → 211 taken 1 time.
✗ Branch 210 → 1114 not taken.
✗ Branch 211 → 212 not taken.
✓ Branch 211 → 1108 taken 1 time.
3 algo->GetOptionScalar<int>("scalar_empty");
49 fmt::print(stderr, "ERROR: accessing 'scalar_empty' did not throw exception\n");
50 return 1;
51 }
52
1/2
✗ Branch 1116 → 1117 not taken.
✓ Branch 1116 → 1118 taken 1 time.
1 catch(std::exception const& ex) {
53 1 fmt::print("SUCCESS: accessing 'scalar_empty' threw an expected exception\n");
54 1 }
55 try {
56
3/6
✓ Branch 221 → 222 taken 1 time.
✗ Branch 221 → 1130 not taken.
✗ Branch 222 → 223 not taken.
✓ Branch 222 → 1124 taken 1 time.
✓ Branch 1121 → 220 taken 1 time.
✗ Branch 1121 → 1132 not taken.
3 algo->GetOptionVector<int>("vector_empty");
57 fmt::print(stderr, "ERROR: accessing 'vector_empty' did not throw exception\n");
58 return 1;
59 }
60
1/2
✗ Branch 1132 → 1133 not taken.
✓ Branch 1132 → 1134 taken 1 time.
1 catch(std::exception const& ex) {
61 1 fmt::print("SUCCESS: accessing 'vector_empty' threw an expected exception\n");
62 1 }
63 try {
64
3/6
✓ Branch 235 → 236 taken 1 time.
✗ Branch 235 → 1146 not taken.
✗ Branch 236 → 237 not taken.
✓ Branch 236 → 1140 taken 1 time.
✓ Branch 1137 → 234 taken 1 time.
✗ Branch 1137 → 1148 not taken.
3 algo->GetOptionSet<int>("vector_empty");
65 fmt::print(stderr, "ERROR: accessing 'vector_empty' as a `set` did not throw exception\n");
66 return 1;
67 }
68
1/2
✗ Branch 1148 → 1149 not taken.
✓ Branch 1148 → 1150 taken 1 time.
1 catch(std::exception const& ex) {
69 1 fmt::print("SUCCESS: accessing 'vector_empty' as a `set` threw an expected exception\n");
70 1 }
71 // test access to a key that does not exist
72 try {
73
3/6
✓ Branch 247 → 248 taken 1 time.
✗ Branch 247 → 1162 not taken.
✗ Branch 248 → 249 not taken.
✓ Branch 248 → 1156 taken 1 time.
✓ Branch 1153 → 246 taken 1 time.
✗ Branch 1153 → 1164 not taken.
3 algo->GetOptionScalar<int>("non_existent_scalar");
74 fmt::print(stderr, "ERROR: accessing 'non_existent_scalar' did not throw exception\n");
75 return 1;
76 }
77
1/2
✗ Branch 1164 → 1165 not taken.
✓ Branch 1164 → 1166 taken 1 time.
1 catch(std::exception const& ex) {
78 1 fmt::print("SUCCESS: accessing 'non_existent_scalar' threw an expected exception\n");
79 1 }
80 try {
81
3/6
✓ Branch 258 → 259 taken 1 time.
✗ Branch 258 → 1178 not taken.
✗ Branch 259 → 260 not taken.
✓ Branch 259 → 1172 taken 1 time.
✓ Branch 1169 → 257 taken 1 time.
✗ Branch 1169 → 1180 not taken.
3 algo->GetOptionVector<int>("non_existent_vector");
82 fmt::print(stderr, "ERROR: accessing 'non_existent_vector' did not throw exception\n");
83 return 1;
84 }
85
1/2
✗ Branch 1180 → 1181 not taken.
✓ Branch 1180 → 1182 taken 1 time.
1 catch(std::exception const& ex) {
86 1 fmt::print("SUCCESS: accessing 'non_existent_vector' threw an expected exception\n");
87 1 }
88 try {
89
3/6
✓ Branch 272 → 273 taken 1 time.
✗ Branch 272 → 1194 not taken.
✗ Branch 273 → 274 not taken.
✓ Branch 273 → 1188 taken 1 time.
✓ Branch 1185 → 271 taken 1 time.
✗ Branch 1185 → 1196 not taken.
3 algo->GetOptionSet<int>("non_existent_vector");
90 fmt::print(stderr, "ERROR: accessing 'non_existent_vector' as a `set` did not throw exception\n");
91 return 1;
92 }
93
1/2
✗ Branch 1196 → 1197 not taken.
✓ Branch 1196 → 1198 taken 1 time.
1 catch(std::exception const& ex) {
94 1 fmt::print("SUCCESS: accessing 'non_existent_vector' as a `set` threw an expected exception\n");
95 1 }
96 break;
97 }
98
99 case 2: {
100
7/14
✓ Branch 288 → 289 taken 1 time.
✗ Branch 288 → 1215 not taken.
✓ Branch 289 → 290 taken 1 time.
✗ Branch 289 → 1213 not taken.
✓ Branch 290 → 291 taken 1 time.
✗ Branch 290 → 1207 not taken.
✗ Branch 291 → 292 not taken.
✓ Branch 291 → 293 taken 1 time.
✓ Branch 300 → 301 taken 2 times.
✓ Branch 300 → 303 taken 1 time.
✓ Branch 303 → 304 taken 1 time.
✗ Branch 303 → 1238 not taken.
✗ Branch 1216 → 1217 not taken.
✗ Branch 1216 → 1219 not taken.
4 assert((algo->GetOptionScalar<double>("t1s1", {"tree1", "scalar1"}) == 1.5));
101
7/14
✓ Branch 305 → 306 taken 1 time.
✗ Branch 305 → 1233 not taken.
✓ Branch 306 → 307 taken 1 time.
✗ Branch 306 → 1231 not taken.
✓ Branch 307 → 308 taken 1 time.
✗ Branch 307 → 1225 not taken.
✗ Branch 308 → 309 not taken.
✓ Branch 308 → 310 taken 1 time.
✓ Branch 317 → 318 taken 2 times.
✓ Branch 317 → 320 taken 1 time.
✓ Branch 320 → 321 taken 1 time.
✗ Branch 320 → 1256 not taken.
✗ Branch 1234 → 1235 not taken.
✗ Branch 1234 → 1237 not taken.
4 assert((algo->GetOptionScalar<double>("t1s2", {"tree1", "scalar2"}) == 2.5));
102
6/12
✓ Branch 323 → 324 taken 1 time.
✗ Branch 323 → 1251 not taken.
✓ Branch 324 → 325 taken 1 time.
✗ Branch 324 → 1249 not taken.
✓ Branch 325 → 326 taken 1 time.
✗ Branch 325 → 1243 not taken.
✗ Branch 326 → 327 not taken.
✓ Branch 326 → 328 taken 1 time.
✓ Branch 335 → 336 taken 3 times.
✓ Branch 335 → 338 taken 1 time.
✗ Branch 1252 → 1253 not taken.
✗ Branch 1252 → 1255 not taken.
5 assert((algo->GetOptionScalar<double>("t2t1s1", {"tree2", "tree1", "scalar1"}) == 3.5));
103
13/30
✓ Branch 339 → 340 taken 2 times.
✗ Branch 339 → 1290 not taken.
✓ Branch 341 → 339 taken 2 times.
✓ Branch 341 → 342 taken 1 time.
✓ Branch 342 → 343 taken 1 time.
✗ Branch 342 → 1281 not taken.
✓ Branch 347 → 348 taken 1 time.
✗ Branch 347 → 1269 not taken.
✓ Branch 348 → 349 taken 1 time.
✗ Branch 348 → 1267 not taken.
✓ Branch 349 → 350 taken 1 time.
✗ Branch 349 → 1261 not taken.
✗ Branch 350 → 351 not taken.
✓ Branch 350 → 352 taken 1 time.
✓ Branch 360 → 361 taken 4 times.
✓ Branch 360 → 363 taken 1 time.
✓ Branch 365 → 366 taken 2 times.
✓ Branch 365 → 372 taken 1 time.
✓ Branch 366 → 367 taken 2 times.
✗ Branch 366 → 369 not taken.
✗ Branch 1270 → 1271 not taken.
✗ Branch 1270 → 1273 not taken.
✗ Branch 1282 → 1283 not taken.
✗ Branch 1282 → 1289 not taken.
✗ Branch 1283 → 1284 not taken.
✗ Branch 1283 → 1286 not taken.
✗ Branch 1291 → 1292 not taken.
✗ Branch 1291 → 1298 not taken.
✗ Branch 1292 → 1293 not taken.
✗ Branch 1292 → 1295 not taken.
11 assert((algo->GetOptionVector<std::string>("t2t2t3v1", {"tree2", "tree2", "tree3", "vector1"}) == std::vector<std::string>{"gecko", "snake"}));
104
8/18
✓ Branch 372 → 373 taken 1 time.
✗ Branch 372 → 1848 not taken.
✓ Branch 375 → 376 taken 1 time.
✗ Branch 375 → 1307 not taken.
✓ Branch 376 → 377 taken 1 time.
✗ Branch 376 → 1305 not taken.
✓ Branch 377 → 378 taken 1 time.
✗ Branch 377 → 1299 not taken.
✗ Branch 378 → 379 not taken.
✓ Branch 378 → 380 taken 1 time.
✓ Branch 390 → 391 taken 2 times.
✓ Branch 390 → 393 taken 1 time.
✓ Branch 393 → 394 taken 1 time.
✗ Branch 393 → 396 not taken.
✗ Branch 1308 → 1309 not taken.
✗ Branch 1308 → 1311 not taken.
✗ Branch 1317 → 1318 not taken.
✗ Branch 1317 → 1320 not taken.
5 assert((algo->GetOptionVector<int>("t2v2", {"tree2", "vector2"}) == std::vector<int>{3, -4, 5}));
105
13/30
✓ Branch 397 → 398 taken 1 time.
✗ Branch 397 → 1345 not taken.
✓ Branch 399 → 397 taken 1 time.
✓ Branch 399 → 400 taken 1 time.
✓ Branch 400 → 401 taken 1 time.
✗ Branch 400 → 1336 not taken.
✓ Branch 402 → 403 taken 1 time.
✗ Branch 402 → 1329 not taken.
✓ Branch 403 → 404 taken 1 time.
✗ Branch 403 → 1327 not taken.
✓ Branch 404 → 405 taken 1 time.
✗ Branch 404 → 1321 not taken.
✗ Branch 405 → 406 not taken.
✓ Branch 405 → 407 taken 1 time.
✓ Branch 415 → 416 taken 1 time.
✓ Branch 415 → 418 taken 1 time.
✓ Branch 420 → 421 taken 1 time.
✓ Branch 420 → 427 taken 1 time.
✓ Branch 421 → 422 taken 1 time.
✗ Branch 421 → 424 not taken.
✗ Branch 1330 → 1331 not taken.
✗ Branch 1330 → 1333 not taken.
✗ Branch 1337 → 1338 not taken.
✗ Branch 1337 → 1344 not taken.
✗ Branch 1338 → 1339 not taken.
✗ Branch 1338 → 1341 not taken.
✗ Branch 1346 → 1347 not taken.
✗ Branch 1346 → 1353 not taken.
✗ Branch 1347 → 1348 not taken.
✗ Branch 1347 → 1350 not taken.
6 assert((algo->GetOptionVector<std::string>("vector1", {"vector1"}) == std::vector<std::string>{"bee"}));
106
11/26
✓ Branch 428 → 429 taken 1 time.
✗ Branch 428 → 1373 not taken.
✓ Branch 430 → 428 taken 1 time.
✓ Branch 430 → 431 taken 1 time.
✓ Branch 431 → 432 taken 1 time.
✗ Branch 431 → 1364 not taken.
✓ Branch 432 → 433 taken 1 time.
✗ Branch 432 → 1362 not taken.
✓ Branch 434 → 435 taken 1 time.
✗ Branch 434 → 1360 not taken.
✓ Branch 435 → 436 taken 1 time.
✗ Branch 435 → 1354 not taken.
✗ Branch 436 → 437 not taken.
✓ Branch 436 → 438 taken 1 time.
✓ Branch 447 → 448 taken 1 time.
✓ Branch 447 → 454 taken 1 time.
✓ Branch 448 → 449 taken 1 time.
✗ Branch 448 → 451 not taken.
✗ Branch 1365 → 1366 not taken.
✗ Branch 1365 → 1372 not taken.
✗ Branch 1366 → 1367 not taken.
✗ Branch 1366 → 1369 not taken.
✗ Branch 1374 → 1375 not taken.
✗ Branch 1374 → 1381 not taken.
✗ Branch 1375 → 1376 not taken.
✗ Branch 1375 → 1378 not taken.
5 assert((algo->GetOptionVector<std::string>("vector1") == std::vector<std::string>{"bee"}));
107 1 break;
108 }
109
110 case 3: {
111 // test InRange tree1
112
10/20
✓ Branch 457 → 458 taken 1 time.
✗ Branch 457 → 1404 not taken.
✓ Branch 458 → 459 taken 1 time.
✗ Branch 458 → 1404 not taken.
✓ Branch 459 → 460 taken 1 time.
✗ Branch 459 → 1398 not taken.
✓ Branch 463 → 464 taken 1 time.
✗ Branch 463 → 1390 not taken.
✓ Branch 464 → 465 taken 1 time.
✗ Branch 464 → 1388 not taken.
✓ Branch 465 → 466 taken 1 time.
✗ Branch 465 → 1382 not taken.
✗ Branch 466 → 467 not taken.
✓ Branch 466 → 468 taken 1 time.
✓ Branch 475 → 476 taken 3 times.
✓ Branch 475 → 478 taken 1 time.
✓ Branch 485 → 486 taken 1 time.
✗ Branch 485 → 1431 not taken.
✗ Branch 1391 → 1392 not taken.
✗ Branch 1391 → 1394 not taken.
7 assert((algo->GetOptionScalar<int>("t1a", {"tree1", algo->GetConfig()->InRange("test_range", 1), "val"}) == 3));
113
10/20
✓ Branch 486 → 487 taken 1 time.
✗ Branch 486 → 1431 not taken.
✓ Branch 487 → 488 taken 1 time.
✗ Branch 487 → 1431 not taken.
✓ Branch 488 → 489 taken 1 time.
✗ Branch 488 → 1425 not taken.
✓ Branch 492 → 493 taken 1 time.
✗ Branch 492 → 1417 not taken.
✓ Branch 493 → 494 taken 1 time.
✗ Branch 493 → 1415 not taken.
✓ Branch 494 → 495 taken 1 time.
✗ Branch 494 → 1409 not taken.
✗ Branch 495 → 496 not taken.
✓ Branch 495 → 497 taken 1 time.
✓ Branch 504 → 505 taken 3 times.
✓ Branch 504 → 507 taken 1 time.
✓ Branch 514 → 515 taken 1 time.
✗ Branch 514 → 1458 not taken.
✗ Branch 1418 → 1419 not taken.
✗ Branch 1418 → 1421 not taken.
7 assert((algo->GetOptionScalar<int>("t1b", {"tree1", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
114
10/20
✓ Branch 515 → 516 taken 1 time.
✗ Branch 515 → 1458 not taken.
✓ Branch 516 → 517 taken 1 time.
✗ Branch 516 → 1458 not taken.
✓ Branch 517 → 518 taken 1 time.
✗ Branch 517 → 1452 not taken.
✓ Branch 521 → 522 taken 1 time.
✗ Branch 521 → 1444 not taken.
✓ Branch 522 → 523 taken 1 time.
✗ Branch 522 → 1442 not taken.
✓ Branch 523 → 524 taken 1 time.
✗ Branch 523 → 1436 not taken.
✗ Branch 524 → 525 not taken.
✓ Branch 524 → 526 taken 1 time.
✓ Branch 533 → 534 taken 3 times.
✓ Branch 533 → 536 taken 1 time.
✓ Branch 543 → 544 taken 1 time.
✗ Branch 543 → 1485 not taken.
✗ Branch 1445 → 1446 not taken.
✗ Branch 1445 → 1448 not taken.
7 assert((algo->GetOptionScalar<int>("t1c", {"tree1", algo->GetConfig()->InRange("test_range", 5), "val"}) == 3)); // at a border
115
10/20
✓ Branch 544 → 545 taken 1 time.
✗ Branch 544 → 1485 not taken.
✓ Branch 545 → 546 taken 1 time.
✗ Branch 545 → 1485 not taken.
✓ Branch 546 → 547 taken 1 time.
✗ Branch 546 → 1479 not taken.
✓ Branch 550 → 551 taken 1 time.
✗ Branch 550 → 1471 not taken.
✓ Branch 551 → 552 taken 1 time.
✗ Branch 551 → 1469 not taken.
✓ Branch 552 → 553 taken 1 time.
✗ Branch 552 → 1463 not taken.
✗ Branch 553 → 554 not taken.
✓ Branch 553 → 555 taken 1 time.
✓ Branch 562 → 563 taken 3 times.
✓ Branch 562 → 565 taken 1 time.
✓ Branch 572 → 573 taken 1 time.
✗ Branch 572 → 1512 not taken.
✗ Branch 1472 → 1473 not taken.
✗ Branch 1472 → 1475 not taken.
7 assert((algo->GetOptionScalar<int>("t1d", {"tree1", algo->GetConfig()->InRange("test_range", 6), "val"}) == 4));
116
10/20
✓ Branch 573 → 574 taken 1 time.
✗ Branch 573 → 1512 not taken.
✓ Branch 574 → 575 taken 1 time.
✗ Branch 574 → 1512 not taken.
✓ Branch 575 → 576 taken 1 time.
✗ Branch 575 → 1506 not taken.
✓ Branch 579 → 580 taken 1 time.
✗ Branch 579 → 1498 not taken.
✓ Branch 580 → 581 taken 1 time.
✗ Branch 580 → 1496 not taken.
✓ Branch 581 → 582 taken 1 time.
✗ Branch 581 → 1490 not taken.
✗ Branch 582 → 583 not taken.
✓ Branch 582 → 584 taken 1 time.
✓ Branch 591 → 592 taken 3 times.
✓ Branch 591 → 594 taken 1 time.
✓ Branch 601 → 602 taken 1 time.
✗ Branch 601 → 1539 not taken.
✗ Branch 1499 → 1500 not taken.
✗ Branch 1499 → 1502 not taken.
7 assert((algo->GetOptionScalar<int>("t1e", {"tree1", algo->GetConfig()->InRange("test_range", 10), "val"}) == 4));
117
10/20
✓ Branch 602 → 603 taken 1 time.
✗ Branch 602 → 1539 not taken.
✓ Branch 603 → 604 taken 1 time.
✗ Branch 603 → 1539 not taken.
✓ Branch 604 → 605 taken 1 time.
✗ Branch 604 → 1533 not taken.
✓ Branch 608 → 609 taken 1 time.
✗ Branch 608 → 1525 not taken.
✓ Branch 609 → 610 taken 1 time.
✗ Branch 609 → 1523 not taken.
✓ Branch 610 → 611 taken 1 time.
✗ Branch 610 → 1517 not taken.
✗ Branch 611 → 612 not taken.
✓ Branch 611 → 613 taken 1 time.
✓ Branch 620 → 621 taken 3 times.
✓ Branch 620 → 623 taken 1 time.
✓ Branch 630 → 631 taken 1 time.
✗ Branch 630 → 1566 not taken.
✗ Branch 1526 → 1527 not taken.
✗ Branch 1526 → 1529 not taken.
7 assert((algo->GetOptionScalar<int>("t1f", {"tree1", algo->GetConfig()->InRange("test_range", 11), "val"}) == 0)); // default fallback
118
10/20
✓ Branch 631 → 632 taken 1 time.
✗ Branch 631 → 1566 not taken.
✓ Branch 632 → 633 taken 1 time.
✗ Branch 632 → 1566 not taken.
✓ Branch 633 → 634 taken 1 time.
✗ Branch 633 → 1560 not taken.
✓ Branch 637 → 638 taken 1 time.
✗ Branch 637 → 1552 not taken.
✓ Branch 638 → 639 taken 1 time.
✗ Branch 638 → 1550 not taken.
✓ Branch 639 → 640 taken 1 time.
✗ Branch 639 → 1544 not taken.
✗ Branch 640 → 641 not taken.
✓ Branch 640 → 642 taken 1 time.
✓ Branch 649 → 650 taken 3 times.
✓ Branch 649 → 652 taken 1 time.
✓ Branch 659 → 660 taken 1 time.
✗ Branch 659 → 1593 not taken.
✗ Branch 1553 → 1554 not taken.
✗ Branch 1553 → 1556 not taken.
7 assert((algo->GetOptionScalar<int>("t1g", {"tree1", algo->GetConfig()->InRange("test_range", 10.1), "val"}) == 0)); // wrong type
119
10/20
✓ Branch 660 → 661 taken 1 time.
✗ Branch 660 → 1593 not taken.
✓ Branch 661 → 662 taken 1 time.
✗ Branch 661 → 1593 not taken.
✓ Branch 662 → 663 taken 1 time.
✗ Branch 662 → 1587 not taken.
✓ Branch 666 → 667 taken 1 time.
✗ Branch 666 → 1579 not taken.
✓ Branch 667 → 668 taken 1 time.
✗ Branch 667 → 1577 not taken.
✓ Branch 668 → 669 taken 1 time.
✗ Branch 668 → 1571 not taken.
✗ Branch 669 → 670 not taken.
✓ Branch 669 → 671 taken 1 time.
✓ Branch 678 → 679 taken 3 times.
✓ Branch 678 → 681 taken 1 time.
✓ Branch 688 → 689 taken 1 time.
✗ Branch 688 → 1620 not taken.
✗ Branch 1580 → 1581 not taken.
✗ Branch 1580 → 1583 not taken.
7 assert((algo->GetOptionScalar<int>("t1h", {"tree1", algo->GetConfig()->InRange("test_range", 3.7), "val"}) == 3)); // wrong type
120 // test InRange tree2
121
10/20
✓ Branch 689 → 690 taken 1 time.
✗ Branch 689 → 1620 not taken.
✓ Branch 690 → 691 taken 1 time.
✗ Branch 690 → 1620 not taken.
✓ Branch 691 → 692 taken 1 time.
✗ Branch 691 → 1614 not taken.
✓ Branch 696 → 697 taken 1 time.
✗ Branch 696 → 1606 not taken.
✓ Branch 697 → 698 taken 1 time.
✗ Branch 697 → 1604 not taken.
✓ Branch 698 → 699 taken 1 time.
✗ Branch 698 → 1598 not taken.
✗ Branch 699 → 700 not taken.
✓ Branch 699 → 701 taken 1 time.
✓ Branch 713 → 714 taken 4 times.
✓ Branch 713 → 716 taken 1 time.
✓ Branch 723 → 724 taken 1 time.
✗ Branch 723 → 1647 not taken.
✗ Branch 1607 → 1608 not taken.
✗ Branch 1607 → 1610 not taken.
8 assert((algo->GetOptionScalar<std::string>("t2a", {"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "lizard"}) == "iguana"));
122
10/20
✓ Branch 724 → 725 taken 1 time.
✗ Branch 724 → 1647 not taken.
✓ Branch 725 → 726 taken 1 time.
✗ Branch 725 → 1647 not taken.
✓ Branch 726 → 727 taken 1 time.
✗ Branch 726 → 1641 not taken.
✓ Branch 731 → 732 taken 1 time.
✗ Branch 731 → 1633 not taken.
✓ Branch 732 → 733 taken 1 time.
✗ Branch 732 → 1631 not taken.
✓ Branch 733 → 734 taken 1 time.
✗ Branch 733 → 1625 not taken.
✗ Branch 734 → 735 not taken.
✓ Branch 734 → 736 taken 1 time.
✓ Branch 743 → 744 taken 4 times.
✓ Branch 743 → 746 taken 1 time.
✓ Branch 753 → 754 taken 1 time.
✗ Branch 753 → 1683 not taken.
✗ Branch 1634 → 1635 not taken.
✗ Branch 1634 → 1637 not taken.
8 assert((algo->GetOptionScalar<int>("t2b", {"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "number"}) == 7));
123
14/30
✓ Branch 754 → 755 taken 1 time.
✗ Branch 754 → 1683 not taken.
✓ Branch 755 → 756 taken 1 time.
✗ Branch 755 → 1683 not taken.
✓ Branch 756 → 757 taken 1 time.
✗ Branch 756 → 1677 not taken.
✓ Branch 760 → 761 taken 1 time.
✗ Branch 760 → 1674 not taken.
✓ Branch 761 → 762 taken 1 time.
✗ Branch 761 → 1674 not taken.
✓ Branch 762 → 763 taken 1 time.
✗ Branch 762 → 1668 not taken.
✓ Branch 766 → 767 taken 1 time.
✗ Branch 766 → 1660 not taken.
✓ Branch 767 → 768 taken 1 time.
✗ Branch 767 → 1658 not taken.
✓ Branch 768 → 769 taken 1 time.
✗ Branch 768 → 1652 not taken.
✗ Branch 769 → 770 not taken.
✓ Branch 769 → 771 taken 1 time.
✓ Branch 778 → 779 taken 5 times.
✓ Branch 778 → 781 taken 1 time.
✗ Branch 788 → 789 not taken.
✓ Branch 788 → 790 taken 1 time.
✓ Branch 795 → 796 taken 1 time.
✗ Branch 795 → 1719 not taken.
✗ Branch 1661 → 1662 not taken.
✗ Branch 1661 → 1664 not taken.
✗ Branch 1674 → 1675 not taken.
✗ Branch 1674 → 1676 not taken.
11 assert((algo->GetOptionScalar<int>("t2c", {"tree2", algo->GetConfig()->InRange("test_range", 3.0), "subtree", algo->GetConfig()->InRange("sub_range", 1), "val"}) == 7));
124
14/30
✓ Branch 796 → 797 taken 1 time.
✗ Branch 796 → 1719 not taken.
✓ Branch 797 → 798 taken 1 time.
✗ Branch 797 → 1719 not taken.
✓ Branch 798 → 799 taken 1 time.
✗ Branch 798 → 1713 not taken.
✓ Branch 802 → 803 taken 1 time.
✗ Branch 802 → 1710 not taken.
✓ Branch 803 → 804 taken 1 time.
✗ Branch 803 → 1710 not taken.
✓ Branch 804 → 805 taken 1 time.
✗ Branch 804 → 1704 not taken.
✓ Branch 808 → 809 taken 1 time.
✗ Branch 808 → 1696 not taken.
✓ Branch 809 → 810 taken 1 time.
✗ Branch 809 → 1694 not taken.
✓ Branch 810 → 811 taken 1 time.
✗ Branch 810 → 1688 not taken.
✗ Branch 811 → 812 not taken.
✓ Branch 811 → 813 taken 1 time.
✓ Branch 820 → 821 taken 5 times.
✓ Branch 820 → 823 taken 1 time.
✗ Branch 830 → 831 not taken.
✓ Branch 830 → 832 taken 1 time.
✓ Branch 837 → 838 taken 1 time.
✗ Branch 837 → 1755 not taken.
✗ Branch 1697 → 1698 not taken.
✗ Branch 1697 → 1700 not taken.
✗ Branch 1710 → 1711 not taken.
✗ Branch 1710 → 1712 not taken.
11 assert((algo->GetOptionScalar<int>("t2d", {"tree2", algo->GetConfig()->InRange("test_range", 3.0), "subtree", algo->GetConfig()->InRange("sub_range", 8), "val"}) == 8));
125
14/30
✓ Branch 838 → 839 taken 1 time.
✗ Branch 838 → 1755 not taken.
✓ Branch 839 → 840 taken 1 time.
✗ Branch 839 → 1755 not taken.
✓ Branch 840 → 841 taken 1 time.
✗ Branch 840 → 1749 not taken.
✓ Branch 844 → 845 taken 1 time.
✗ Branch 844 → 1746 not taken.
✓ Branch 845 → 846 taken 1 time.
✗ Branch 845 → 1746 not taken.
✓ Branch 846 → 847 taken 1 time.
✗ Branch 846 → 1740 not taken.
✓ Branch 850 → 851 taken 1 time.
✗ Branch 850 → 1732 not taken.
✓ Branch 851 → 852 taken 1 time.
✗ Branch 851 → 1730 not taken.
✓ Branch 852 → 853 taken 1 time.
✗ Branch 852 → 1724 not taken.
✗ Branch 853 → 854 not taken.
✓ Branch 853 → 855 taken 1 time.
✓ Branch 862 → 863 taken 5 times.
✓ Branch 862 → 865 taken 1 time.
✗ Branch 872 → 873 not taken.
✓ Branch 872 → 874 taken 1 time.
✓ Branch 879 → 880 taken 1 time.
✗ Branch 879 → 1782 not taken.
✗ Branch 1733 → 1734 not taken.
✗ Branch 1733 → 1736 not taken.
✗ Branch 1746 → 1747 not taken.
✗ Branch 1746 → 1748 not taken.
11 assert((algo->GetOptionScalar<int>("t2e", {"tree2", algo->GetConfig()->InRange("test_range", 3.5), "subtree", algo->GetConfig()->InRange("sub_range", 11), "val"}) == 1));
126
10/20
✓ Branch 880 → 881 taken 1 time.
✗ Branch 880 → 1782 not taken.
✓ Branch 881 → 882 taken 1 time.
✗ Branch 881 → 1782 not taken.
✓ Branch 882 → 883 taken 1 time.
✗ Branch 882 → 1776 not taken.
✓ Branch 886 → 887 taken 1 time.
✗ Branch 886 → 1768 not taken.
✓ Branch 887 → 888 taken 1 time.
✗ Branch 887 → 1766 not taken.
✓ Branch 888 → 889 taken 1 time.
✗ Branch 888 → 1760 not taken.
✗ Branch 889 → 890 not taken.
✓ Branch 889 → 891 taken 1 time.
✓ Branch 898 → 899 taken 3 times.
✓ Branch 898 → 901 taken 1 time.
✓ Branch 908 → 909 taken 1 time.
✗ Branch 908 → 1809 not taken.
✗ Branch 1769 → 1770 not taken.
✗ Branch 1769 → 1772 not taken.
7 assert((algo->GetOptionScalar<int>("t2f", {"tree2", algo->GetConfig()->InRange("test_range", 4.0), "subtree"}) == 10));
127 // test InRange tree3
128
10/22
✓ Branch 909 → 910 taken 1 time.
✗ Branch 909 → 1809 not taken.
✓ Branch 910 → 911 taken 1 time.
✗ Branch 910 → 1809 not taken.
✓ Branch 911 → 912 taken 1 time.
✗ Branch 911 → 1803 not taken.
✓ Branch 915 → 916 taken 1 time.
✗ Branch 915 → 1795 not taken.
✓ Branch 916 → 917 taken 1 time.
✗ Branch 916 → 1793 not taken.
✓ Branch 917 → 918 taken 1 time.
✗ Branch 917 → 1787 not taken.
✗ Branch 918 → 919 not taken.
✓ Branch 918 → 920 taken 1 time.
✓ Branch 927 → 928 taken 3 times.
✓ Branch 927 → 930 taken 1 time.
✓ Branch 937 → 938 taken 1 time.
✗ Branch 937 → 1836 not taken.
✗ Branch 1796 → 1797 not taken.
✗ Branch 1796 → 1799 not taken.
✗ Branch 1848 → 1849 not taken.
✗ Branch 1848 → 1851 not taken.
7 assert((algo->GetOptionScalar<int>("t3a", {"tree3", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
129 try {
130
8/18
✓ Branch 938 → 939 taken 1 time.
✗ Branch 938 → 1836 not taken.
✓ Branch 939 → 940 taken 1 time.
✗ Branch 939 → 1836 not taken.
✓ Branch 940 → 941 taken 1 time.
✗ Branch 940 → 1830 not taken.
✓ Branch 944 → 945 taken 1 time.
✗ Branch 944 → 1822 not taken.
✓ Branch 945 → 946 taken 1 time.
✗ Branch 945 → 1820 not taken.
✗ Branch 946 → 947 not taken.
✓ Branch 946 → 1814 taken 1 time.
✗ Branch 947 → 948 not taken.
✗ Branch 947 → 949 not taken.
✗ Branch 956 → 957 not taken.
✗ Branch 956 → 959 not taken.
✓ Branch 1823 → 1824 taken 3 times.
✓ Branch 1823 → 1826 taken 1 time.
7 assert((algo->GetOptionScalar<int>("t3b", {"tree3", algo->GetConfig()->InRange("test_range", 11), "val"}) == 0));
131 fmt::print(stderr, "ERROR: accessing a missing default value for `InRange` did not throw exception\n");
132 return 1;
133 }
134
1/2
✗ Branch 1841 → 1842 not taken.
✓ Branch 1841 → 1843 taken 1 time.
1 catch(std::exception const& ex) {
135 1 fmt::print("SUCCESS: accessing a missing default value for `InRange` threw expected exception\n");
136 1 }
137 break;
138 }
139
140 default:
141 fmt::print(stderr, "ERROR: unknown test number '{}'", test_num);
142 return 1;
143 }
144 return 0;
145
1/42
✗ Branch 1221 → 1222 not taken.
✗ Branch 1221 → 1224 not taken.
✗ Branch 1239 → 1240 not taken.
✗ Branch 1239 → 1242 not taken.
✗ Branch 1257 → 1258 not taken.
✗ Branch 1257 → 1260 not taken.
✗ Branch 1275 → 1276 not taken.
✗ Branch 1275 → 1278 not taken.
✗ Branch 1313 → 1314 not taken.
✗ Branch 1313 → 1316 not taken.
✗ Branch 1405 → 1406 not taken.
✗ Branch 1405 → 1408 not taken.
✗ Branch 1432 → 1433 not taken.
✗ Branch 1432 → 1435 not taken.
✗ Branch 1459 → 1460 not taken.
✗ Branch 1459 → 1462 not taken.
✗ Branch 1486 → 1487 not taken.
✗ Branch 1486 → 1489 not taken.
✗ Branch 1513 → 1514 not taken.
✗ Branch 1513 → 1516 not taken.
✗ Branch 1540 → 1541 not taken.
✗ Branch 1540 → 1543 not taken.
✗ Branch 1567 → 1568 not taken.
✗ Branch 1567 → 1570 not taken.
✗ Branch 1594 → 1595 not taken.
✗ Branch 1594 → 1597 not taken.
✗ Branch 1621 → 1622 not taken.
✗ Branch 1621 → 1624 not taken.
✗ Branch 1648 → 1649 not taken.
✗ Branch 1648 → 1651 not taken.
✗ Branch 1684 → 1685 not taken.
✗ Branch 1684 → 1687 not taken.
✗ Branch 1720 → 1721 not taken.
✗ Branch 1720 → 1723 not taken.
✗ Branch 1756 → 1757 not taken.
✗ Branch 1756 → 1759 not taken.
✗ Branch 1783 → 1784 not taken.
✗ Branch 1783 → 1786 not taken.
✗ Branch 1810 → 1811 not taken.
✗ Branch 1810 → 1813 not taken.
✗ Branch 1837 → 1838 not taken.
✓ Branch 1837 → 1840 taken 1 time.
4 }
146