GCC Code Coverage Report


Directory: ./
File: src/iguana/tests/include/TestConfig.h
Date: 2025-11-25 17:57:04
Coverage Exec Excl Total
Lines: 81.1% 77 0 95
Functions: 100.0% 1 0 1
Branches: 44.3% 332 0 750

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, bool verbose)
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 → 1834 not taken.
✓ Branch 7 → 8 taken 3 times.
✗ Branch 7 → 963 not taken.
3 bad_config.AddDirectory("non_existent_directory");
15 try {
16
2/4
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 975 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 969 taken 3 times.
3 bad_config.AddFile("non_existent_file.yaml");
17 }
18
1/2
✗ Branch 975 → 976 not taken.
✓ Branch 975 → 977 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 → 1834 not taken.
3 bad_config.PrintDirectories();
22
23 // then test configuring an algorithm
24
3/6
✓ Branch 22 → 23 taken 3 times.
✗ Branch 22 → 1834 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 982 not taken.
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 3 times.
6 auto algo = iguana::AlgorithmFactory::Create("example::ExampleAlgorithm");
25
4/8
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 3 times.
✓ Branch 31 → 32 taken 3 times.
✗ Branch 31 → 1830 not taken.
✓ Branch 32 → 33 taken 3 times.
✗ Branch 32 → 988 not taken.
✓ Branch 38 → 39 taken 3 times.
✗ Branch 38 → 1830 not taken.
6 algo->SetOption("log", verbose ? "debug" : "info");
26
3/6
✓ Branch 38 → 39 taken 3 times.
✗ Branch 38 → 1830 not taken.
✓ Branch 39 → 40 taken 3 times.
✗ Branch 39 → 994 not taken.
✓ Branch 45 → 46 taken 3 times.
✗ Branch 45 → 1830 not taken.
6 algo->SetConfigDirectory("src/iguana/tests"); // must be relative to build directory
27
2/4
✓ Branch 46 → 47 taken 3 times.
✗ Branch 46 → 1000 not taken.
✓ Branch 52 → 53 taken 3 times.
✗ Branch 52 → 1830 not taken.
6 algo->SetConfigFile(fmt::format("test_{}.yaml", test_num));
28
1/2
✓ Branch 52 → 53 taken 3 times.
✗ Branch 52 → 1830 not taken.
3 algo->Start();
29
30
3/4
✓ Branch 53 → 54 taken 1 time.
✓ Branch 53 → 274 taken 1 time.
✓ Branch 53 → 444 taken 1 time.
✗ Branch 53 → 956 not taken.
3 switch(test_num) {
31
32 case 1: {
33 // test `GetOptionScalar`
34
5/10
✓ Branch 54 → 55 taken 1 time.
✗ Branch 54 → 1830 not taken.
✓ Branch 56 → 57 taken 1 time.
✗ Branch 56 → 1012 not taken.
✓ Branch 57 → 58 taken 1 time.
✗ Branch 57 → 1006 not taken.
✗ Branch 58 → 59 not taken.
✓ Branch 58 → 60 taken 1 time.
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 1830 not taken.
3 assert((algo->GetOptionScalar<int>("scalar_int") == 1));
35
5/10
✓ Branch 66 → 67 taken 1 time.
✗ Branch 66 → 1830 not taken.
✓ Branch 68 → 69 taken 1 time.
✗ Branch 68 → 1020 not taken.
✓ Branch 69 → 70 taken 1 time.
✗ Branch 69 → 1014 not taken.
✗ Branch 70 → 71 not taken.
✓ Branch 70 → 72 taken 1 time.
✓ Branch 78 → 79 taken 1 time.
✗ Branch 78 → 1830 not taken.
3 assert((algo->GetOptionScalar<double>("scalar_double") == 2.5));
36
4/8
✓ Branch 78 → 79 taken 1 time.
✗ Branch 78 → 1830 not taken.
✓ Branch 80 → 81 taken 1 time.
✗ Branch 80 → 1028 not taken.
✓ Branch 81 → 82 taken 1 time.
✗ Branch 81 → 1022 not taken.
✗ Branch 82 → 83 not taken.
✓ Branch 82 → 84 taken 1 time.
3 assert((algo->GetOptionScalar<std::string>("scalar_string") == "lizard"));
37 // test `GetOptionVector`
38
6/14
✓ Branch 95 → 96 taken 1 time.
✗ Branch 95 → 1830 not taken.
✓ Branch 96 → 97 taken 1 time.
✗ Branch 96 → 1038 not taken.
✓ Branch 98 → 99 taken 1 time.
✗ Branch 98 → 1036 not taken.
✓ Branch 99 → 100 taken 1 time.
✗ Branch 99 → 1030 not taken.
✗ Branch 100 → 101 not taken.
✓ Branch 100 → 102 taken 1 time.
✓ Branch 111 → 112 taken 1 time.
✗ Branch 111 → 114 not taken.
✗ Branch 1038 → 1039 not taken.
✗ Branch 1038 → 1041 not taken.
3 assert((algo->GetOptionVector<int>("vector_int") == std::vector<int>{1, 2, 3}));
39
6/14
✓ Branch 114 → 115 taken 1 time.
✗ Branch 114 → 1830 not taken.
✓ Branch 115 → 116 taken 1 time.
✗ Branch 115 → 1050 not taken.
✓ Branch 117 → 118 taken 1 time.
✗ Branch 117 → 1048 not taken.
✓ Branch 118 → 119 taken 1 time.
✗ Branch 118 → 1042 not taken.
✗ Branch 127 → 128 not taken.
✓ Branch 127 → 129 taken 1 time.
✓ Branch 138 → 139 taken 1 time.
✗ Branch 138 → 141 not taken.
✗ Branch 1050 → 1051 not taken.
✗ Branch 1050 → 1053 not taken.
4 assert((algo->GetOptionVector<double>("vector_double") == std::vector<double>{1.5, 2.5}));
40
12/28
✓ Branch 142 → 143 taken 4 times.
✗ Branch 142 → 1073 not taken.
✓ Branch 144 → 142 taken 4 times.
✓ Branch 144 → 145 taken 1 time.
✓ Branch 145 → 146 taken 1 time.
✗ Branch 145 → 1064 not taken.
✓ Branch 146 → 147 taken 1 time.
✗ Branch 146 → 1062 not taken.
✓ Branch 148 → 149 taken 1 time.
✗ Branch 148 → 1060 not taken.
✓ Branch 149 → 150 taken 1 time.
✗ Branch 149 → 1054 not taken.
✗ Branch 150 → 151 not taken.
✓ Branch 150 → 152 taken 1 time.
✓ Branch 161 → 162 taken 4 times.
✓ Branch 161 → 168 taken 1 time.
✓ Branch 162 → 163 taken 4 times.
✗ Branch 162 → 165 not taken.
✓ Branch 168 → 169 taken 1 time.
✗ Branch 168 → 1830 not taken.
✗ Branch 1065 → 1066 not taken.
✗ Branch 1065 → 1072 not taken.
✗ Branch 1066 → 1067 not taken.
✗ Branch 1066 → 1069 not taken.
✗ Branch 1074 → 1075 not taken.
✗ Branch 1074 → 1081 not taken.
✗ Branch 1075 → 1076 not taken.
✗ Branch 1075 → 1078 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 168 → 169 taken 1 time.
✗ Branch 168 → 1830 not taken.
✓ Branch 170 → 171 taken 1 time.
✗ Branch 170 → 1088 not taken.
✓ Branch 171 → 172 taken 1 time.
✗ Branch 171 → 1082 not taken.
✗ Branch 178 → 179 not taken.
✓ Branch 178 → 180 taken 1 time.
3 auto s = algo->GetOptionSet<std::string>("vector_string");
43
1/2
✗ Branch 178 → 179 not taken.
✓ Branch 178 → 180 taken 1 time.
1 assert((s.size() == 3));
44
2/4
✓ Branch 180 → 181 taken 1 time.
✗ Branch 180 → 1187 not taken.
✗ Branch 181 → 182 not taken.
✓ Branch 181 → 183 taken 1 time.
1 assert((s.find("spider") != s.end()));
45
3/6
✓ Branch 188 → 189 taken 1 time.
✗ Branch 188 → 1187 not taken.
✗ Branch 189 → 190 not taken.
✓ Branch 189 → 191 taken 1 time.
✓ Branch 196 → 197 taken 1 time.
✗ Branch 196 → 1098 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 196 → 197 taken 1 time.
✗ Branch 196 → 1098 not taken.
✓ Branch 198 → 199 taken 1 time.
✗ Branch 198 → 1096 not taken.
✗ Branch 199 → 200 not taken.
✓ Branch 199 → 1090 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 1098 → 1099 not taken.
✓ Branch 1098 → 1100 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 209 → 210 taken 1 time.
✗ Branch 209 → 1112 not taken.
✗ Branch 210 → 211 not taken.
✓ Branch 210 → 1106 taken 1 time.
✓ Branch 1103 → 208 taken 1 time.
✗ Branch 1103 → 1114 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 1114 → 1115 not taken.
✓ Branch 1114 → 1116 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 223 → 224 taken 1 time.
✗ Branch 223 → 1128 not taken.
✗ Branch 224 → 225 not taken.
✓ Branch 224 → 1122 taken 1 time.
✓ Branch 1119 → 222 taken 1 time.
✗ Branch 1119 → 1130 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 1130 → 1131 not taken.
✓ Branch 1130 → 1132 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 235 → 236 taken 1 time.
✗ Branch 235 → 1144 not taken.
✗ Branch 236 → 237 not taken.
✓ Branch 236 → 1138 taken 1 time.
✓ Branch 1135 → 234 taken 1 time.
✗ Branch 1135 → 1146 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 1146 → 1147 not taken.
✓ Branch 1146 → 1148 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 246 → 247 taken 1 time.
✗ Branch 246 → 1160 not taken.
✗ Branch 247 → 248 not taken.
✓ Branch 247 → 1154 taken 1 time.
✓ Branch 1151 → 245 taken 1 time.
✗ Branch 1151 → 1162 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 1162 → 1163 not taken.
✓ Branch 1162 → 1164 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 260 → 261 taken 1 time.
✗ Branch 260 → 1176 not taken.
✗ Branch 261 → 262 not taken.
✓ Branch 261 → 1170 taken 1 time.
✓ Branch 1167 → 259 taken 1 time.
✗ Branch 1167 → 1178 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 1178 → 1179 not taken.
✓ Branch 1178 → 1180 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 276 → 277 taken 1 time.
✗ Branch 276 → 1197 not taken.
✓ Branch 277 → 278 taken 1 time.
✗ Branch 277 → 1195 not taken.
✓ Branch 278 → 279 taken 1 time.
✗ Branch 278 → 1189 not taken.
✗ Branch 279 → 280 not taken.
✓ Branch 279 → 281 taken 1 time.
✓ Branch 288 → 289 taken 2 times.
✓ Branch 288 → 291 taken 1 time.
✓ Branch 291 → 292 taken 1 time.
✗ Branch 291 → 1220 not taken.
✗ Branch 1198 → 1199 not taken.
✗ Branch 1198 → 1201 not taken.
4 assert((algo->GetOptionScalar<double>("t1s1", {"tree1", "scalar1"}) == 1.5));
101
7/14
✓ Branch 293 → 294 taken 1 time.
✗ Branch 293 → 1215 not taken.
✓ Branch 294 → 295 taken 1 time.
✗ Branch 294 → 1213 not taken.
✓ Branch 295 → 296 taken 1 time.
✗ Branch 295 → 1207 not taken.
✗ Branch 296 → 297 not taken.
✓ Branch 296 → 298 taken 1 time.
✓ Branch 305 → 306 taken 2 times.
✓ Branch 305 → 308 taken 1 time.
✓ Branch 308 → 309 taken 1 time.
✗ Branch 308 → 1238 not taken.
✗ Branch 1216 → 1217 not taken.
✗ Branch 1216 → 1219 not taken.
4 assert((algo->GetOptionScalar<double>("t1s2", {"tree1", "scalar2"}) == 2.5));
102
6/12
✓ Branch 311 → 312 taken 1 time.
✗ Branch 311 → 1233 not taken.
✓ Branch 312 → 313 taken 1 time.
✗ Branch 312 → 1231 not taken.
✓ Branch 313 → 314 taken 1 time.
✗ Branch 313 → 1225 not taken.
✗ Branch 314 → 315 not taken.
✓ Branch 314 → 316 taken 1 time.
✓ Branch 323 → 324 taken 3 times.
✓ Branch 323 → 326 taken 1 time.
✗ Branch 1234 → 1235 not taken.
✗ Branch 1234 → 1237 not taken.
5 assert((algo->GetOptionScalar<double>("t2t1s1", {"tree2", "tree1", "scalar1"}) == 3.5));
103
13/30
✓ Branch 327 → 328 taken 2 times.
✗ Branch 327 → 1272 not taken.
✓ Branch 329 → 327 taken 2 times.
✓ Branch 329 → 330 taken 1 time.
✓ Branch 330 → 331 taken 1 time.
✗ Branch 330 → 1263 not taken.
✓ Branch 335 → 336 taken 1 time.
✗ Branch 335 → 1251 not taken.
✓ Branch 336 → 337 taken 1 time.
✗ Branch 336 → 1249 not taken.
✓ Branch 337 → 338 taken 1 time.
✗ Branch 337 → 1243 not taken.
✗ Branch 338 → 339 not taken.
✓ Branch 338 → 340 taken 1 time.
✓ Branch 348 → 349 taken 4 times.
✓ Branch 348 → 351 taken 1 time.
✓ Branch 353 → 354 taken 2 times.
✓ Branch 353 → 360 taken 1 time.
✓ Branch 354 → 355 taken 2 times.
✗ Branch 354 → 357 not taken.
✗ Branch 1252 → 1253 not taken.
✗ Branch 1252 → 1255 not taken.
✗ Branch 1264 → 1265 not taken.
✗ Branch 1264 → 1271 not taken.
✗ Branch 1265 → 1266 not taken.
✗ Branch 1265 → 1268 not taken.
✗ Branch 1273 → 1274 not taken.
✗ Branch 1273 → 1280 not taken.
✗ Branch 1274 → 1275 not taken.
✗ Branch 1274 → 1277 not taken.
11 assert((algo->GetOptionVector<std::string>("t2t2t3v1", {"tree2", "tree2", "tree3", "vector1"}) == std::vector<std::string>{"gecko", "snake"}));
104
8/18
✓ Branch 360 → 361 taken 1 time.
✗ Branch 360 → 1830 not taken.
✓ Branch 363 → 364 taken 1 time.
✗ Branch 363 → 1289 not taken.
✓ Branch 364 → 365 taken 1 time.
✗ Branch 364 → 1287 not taken.
✓ Branch 365 → 366 taken 1 time.
✗ Branch 365 → 1281 not taken.
✗ Branch 366 → 367 not taken.
✓ Branch 366 → 368 taken 1 time.
✓ Branch 378 → 379 taken 2 times.
✓ Branch 378 → 381 taken 1 time.
✓ Branch 381 → 382 taken 1 time.
✗ Branch 381 → 384 not taken.
✗ Branch 1290 → 1291 not taken.
✗ Branch 1290 → 1293 not taken.
✗ Branch 1299 → 1300 not taken.
✗ Branch 1299 → 1302 not taken.
5 assert((algo->GetOptionVector<int>("t2v2", {"tree2", "vector2"}) == std::vector<int>{3, -4, 5}));
105
13/30
✓ Branch 385 → 386 taken 1 time.
✗ Branch 385 → 1327 not taken.
✓ Branch 387 → 385 taken 1 time.
✓ Branch 387 → 388 taken 1 time.
✓ Branch 388 → 389 taken 1 time.
✗ Branch 388 → 1318 not taken.
✓ Branch 390 → 391 taken 1 time.
✗ Branch 390 → 1311 not taken.
✓ Branch 391 → 392 taken 1 time.
✗ Branch 391 → 1309 not taken.
✓ Branch 392 → 393 taken 1 time.
✗ Branch 392 → 1303 not taken.
✗ Branch 393 → 394 not taken.
✓ Branch 393 → 395 taken 1 time.
✓ Branch 403 → 404 taken 1 time.
✓ Branch 403 → 406 taken 1 time.
✓ Branch 408 → 409 taken 1 time.
✓ Branch 408 → 415 taken 1 time.
✓ Branch 409 → 410 taken 1 time.
✗ Branch 409 → 412 not taken.
✗ Branch 1312 → 1313 not taken.
✗ Branch 1312 → 1315 not taken.
✗ Branch 1319 → 1320 not taken.
✗ Branch 1319 → 1326 not taken.
✗ Branch 1320 → 1321 not taken.
✗ Branch 1320 → 1323 not taken.
✗ Branch 1328 → 1329 not taken.
✗ Branch 1328 → 1335 not taken.
✗ Branch 1329 → 1330 not taken.
✗ Branch 1329 → 1332 not taken.
6 assert((algo->GetOptionVector<std::string>("vector1", {"vector1"}) == std::vector<std::string>{"bee"}));
106
11/26
✓ Branch 416 → 417 taken 1 time.
✗ Branch 416 → 1355 not taken.
✓ Branch 418 → 416 taken 1 time.
✓ Branch 418 → 419 taken 1 time.
✓ Branch 419 → 420 taken 1 time.
✗ Branch 419 → 1346 not taken.
✓ Branch 420 → 421 taken 1 time.
✗ Branch 420 → 1344 not taken.
✓ Branch 422 → 423 taken 1 time.
✗ Branch 422 → 1342 not taken.
✓ Branch 423 → 424 taken 1 time.
✗ Branch 423 → 1336 not taken.
✗ Branch 424 → 425 not taken.
✓ Branch 424 → 426 taken 1 time.
✓ Branch 435 → 436 taken 1 time.
✓ Branch 435 → 442 taken 1 time.
✓ Branch 436 → 437 taken 1 time.
✗ Branch 436 → 439 not taken.
✗ Branch 1347 → 1348 not taken.
✗ Branch 1347 → 1354 not taken.
✗ Branch 1348 → 1349 not taken.
✗ Branch 1348 → 1351 not taken.
✗ Branch 1356 → 1357 not taken.
✗ Branch 1356 → 1363 not taken.
✗ Branch 1357 → 1358 not taken.
✗ Branch 1357 → 1360 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 445 → 446 taken 1 time.
✗ Branch 445 → 1386 not taken.
✓ Branch 446 → 447 taken 1 time.
✗ Branch 446 → 1386 not taken.
✓ Branch 447 → 448 taken 1 time.
✗ Branch 447 → 1380 not taken.
✓ Branch 451 → 452 taken 1 time.
✗ Branch 451 → 1372 not taken.
✓ Branch 452 → 453 taken 1 time.
✗ Branch 452 → 1370 not taken.
✓ Branch 453 → 454 taken 1 time.
✗ Branch 453 → 1364 not taken.
✗ Branch 454 → 455 not taken.
✓ Branch 454 → 456 taken 1 time.
✓ Branch 463 → 464 taken 3 times.
✓ Branch 463 → 466 taken 1 time.
✓ Branch 473 → 474 taken 1 time.
✗ Branch 473 → 1413 not taken.
✗ Branch 1373 → 1374 not taken.
✗ Branch 1373 → 1376 not taken.
7 assert((algo->GetOptionScalar<int>("t1a", {"tree1", algo->GetConfig()->InRange("test_range", 1), "val"}) == 3));
113
10/20
✓ Branch 474 → 475 taken 1 time.
✗ Branch 474 → 1413 not taken.
✓ Branch 475 → 476 taken 1 time.
✗ Branch 475 → 1413 not taken.
✓ Branch 476 → 477 taken 1 time.
✗ Branch 476 → 1407 not taken.
✓ Branch 480 → 481 taken 1 time.
✗ Branch 480 → 1399 not taken.
✓ Branch 481 → 482 taken 1 time.
✗ Branch 481 → 1397 not taken.
✓ Branch 482 → 483 taken 1 time.
✗ Branch 482 → 1391 not taken.
✗ Branch 483 → 484 not taken.
✓ Branch 483 → 485 taken 1 time.
✓ Branch 492 → 493 taken 3 times.
✓ Branch 492 → 495 taken 1 time.
✓ Branch 502 → 503 taken 1 time.
✗ Branch 502 → 1440 not taken.
✗ Branch 1400 → 1401 not taken.
✗ Branch 1400 → 1403 not taken.
7 assert((algo->GetOptionScalar<int>("t1b", {"tree1", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
114
10/20
✓ Branch 503 → 504 taken 1 time.
✗ Branch 503 → 1440 not taken.
✓ Branch 504 → 505 taken 1 time.
✗ Branch 504 → 1440 not taken.
✓ Branch 505 → 506 taken 1 time.
✗ Branch 505 → 1434 not taken.
✓ Branch 509 → 510 taken 1 time.
✗ Branch 509 → 1426 not taken.
✓ Branch 510 → 511 taken 1 time.
✗ Branch 510 → 1424 not taken.
✓ Branch 511 → 512 taken 1 time.
✗ Branch 511 → 1418 not taken.
✗ Branch 512 → 513 not taken.
✓ Branch 512 → 514 taken 1 time.
✓ Branch 521 → 522 taken 3 times.
✓ Branch 521 → 524 taken 1 time.
✓ Branch 531 → 532 taken 1 time.
✗ Branch 531 → 1467 not taken.
✗ Branch 1427 → 1428 not taken.
✗ Branch 1427 → 1430 not taken.
7 assert((algo->GetOptionScalar<int>("t1c", {"tree1", algo->GetConfig()->InRange("test_range", 5), "val"}) == 3)); // at a border
115
10/20
✓ Branch 532 → 533 taken 1 time.
✗ Branch 532 → 1467 not taken.
✓ Branch 533 → 534 taken 1 time.
✗ Branch 533 → 1467 not taken.
✓ Branch 534 → 535 taken 1 time.
✗ Branch 534 → 1461 not taken.
✓ Branch 538 → 539 taken 1 time.
✗ Branch 538 → 1453 not taken.
✓ Branch 539 → 540 taken 1 time.
✗ Branch 539 → 1451 not taken.
✓ Branch 540 → 541 taken 1 time.
✗ Branch 540 → 1445 not taken.
✗ Branch 541 → 542 not taken.
✓ Branch 541 → 543 taken 1 time.
✓ Branch 550 → 551 taken 3 times.
✓ Branch 550 → 553 taken 1 time.
✓ Branch 560 → 561 taken 1 time.
✗ Branch 560 → 1494 not taken.
✗ Branch 1454 → 1455 not taken.
✗ Branch 1454 → 1457 not taken.
7 assert((algo->GetOptionScalar<int>("t1d", {"tree1", algo->GetConfig()->InRange("test_range", 6), "val"}) == 4));
116
10/20
✓ Branch 561 → 562 taken 1 time.
✗ Branch 561 → 1494 not taken.
✓ Branch 562 → 563 taken 1 time.
✗ Branch 562 → 1494 not taken.
✓ Branch 563 → 564 taken 1 time.
✗ Branch 563 → 1488 not taken.
✓ Branch 567 → 568 taken 1 time.
✗ Branch 567 → 1480 not taken.
✓ Branch 568 → 569 taken 1 time.
✗ Branch 568 → 1478 not taken.
✓ Branch 569 → 570 taken 1 time.
✗ Branch 569 → 1472 not taken.
✗ Branch 570 → 571 not taken.
✓ Branch 570 → 572 taken 1 time.
✓ Branch 579 → 580 taken 3 times.
✓ Branch 579 → 582 taken 1 time.
✓ Branch 589 → 590 taken 1 time.
✗ Branch 589 → 1521 not taken.
✗ Branch 1481 → 1482 not taken.
✗ Branch 1481 → 1484 not taken.
7 assert((algo->GetOptionScalar<int>("t1e", {"tree1", algo->GetConfig()->InRange("test_range", 10), "val"}) == 4));
117
10/20
✓ Branch 590 → 591 taken 1 time.
✗ Branch 590 → 1521 not taken.
✓ Branch 591 → 592 taken 1 time.
✗ Branch 591 → 1521 not taken.
✓ Branch 592 → 593 taken 1 time.
✗ Branch 592 → 1515 not taken.
✓ Branch 596 → 597 taken 1 time.
✗ Branch 596 → 1507 not taken.
✓ Branch 597 → 598 taken 1 time.
✗ Branch 597 → 1505 not taken.
✓ Branch 598 → 599 taken 1 time.
✗ Branch 598 → 1499 not taken.
✗ Branch 599 → 600 not taken.
✓ Branch 599 → 601 taken 1 time.
✓ Branch 608 → 609 taken 3 times.
✓ Branch 608 → 611 taken 1 time.
✓ Branch 618 → 619 taken 1 time.
✗ Branch 618 → 1548 not taken.
✗ Branch 1508 → 1509 not taken.
✗ Branch 1508 → 1511 not taken.
7 assert((algo->GetOptionScalar<int>("t1f", {"tree1", algo->GetConfig()->InRange("test_range", 11), "val"}) == 0)); // default fallback
118
10/20
✓ Branch 619 → 620 taken 1 time.
✗ Branch 619 → 1548 not taken.
✓ Branch 620 → 621 taken 1 time.
✗ Branch 620 → 1548 not taken.
✓ Branch 621 → 622 taken 1 time.
✗ Branch 621 → 1542 not taken.
✓ Branch 625 → 626 taken 1 time.
✗ Branch 625 → 1534 not taken.
✓ Branch 626 → 627 taken 1 time.
✗ Branch 626 → 1532 not taken.
✓ Branch 627 → 628 taken 1 time.
✗ Branch 627 → 1526 not taken.
✗ Branch 628 → 629 not taken.
✓ Branch 628 → 630 taken 1 time.
✓ Branch 637 → 638 taken 3 times.
✓ Branch 637 → 640 taken 1 time.
✓ Branch 647 → 648 taken 1 time.
✗ Branch 647 → 1575 not taken.
✗ Branch 1535 → 1536 not taken.
✗ Branch 1535 → 1538 not taken.
7 assert((algo->GetOptionScalar<int>("t1g", {"tree1", algo->GetConfig()->InRange("test_range", 10.1), "val"}) == 0)); // wrong type
119
10/20
✓ Branch 648 → 649 taken 1 time.
✗ Branch 648 → 1575 not taken.
✓ Branch 649 → 650 taken 1 time.
✗ Branch 649 → 1575 not taken.
✓ Branch 650 → 651 taken 1 time.
✗ Branch 650 → 1569 not taken.
✓ Branch 654 → 655 taken 1 time.
✗ Branch 654 → 1561 not taken.
✓ Branch 655 → 656 taken 1 time.
✗ Branch 655 → 1559 not taken.
✓ Branch 656 → 657 taken 1 time.
✗ Branch 656 → 1553 not taken.
✗ Branch 657 → 658 not taken.
✓ Branch 657 → 659 taken 1 time.
✓ Branch 666 → 667 taken 3 times.
✓ Branch 666 → 669 taken 1 time.
✓ Branch 676 → 677 taken 1 time.
✗ Branch 676 → 1602 not taken.
✗ Branch 1562 → 1563 not taken.
✗ Branch 1562 → 1565 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 677 → 678 taken 1 time.
✗ Branch 677 → 1602 not taken.
✓ Branch 678 → 679 taken 1 time.
✗ Branch 678 → 1602 not taken.
✓ Branch 679 → 680 taken 1 time.
✗ Branch 679 → 1596 not taken.
✓ Branch 684 → 685 taken 1 time.
✗ Branch 684 → 1588 not taken.
✓ Branch 685 → 686 taken 1 time.
✗ Branch 685 → 1586 not taken.
✓ Branch 686 → 687 taken 1 time.
✗ Branch 686 → 1580 not taken.
✗ Branch 687 → 688 not taken.
✓ Branch 687 → 689 taken 1 time.
✓ Branch 701 → 702 taken 4 times.
✓ Branch 701 → 704 taken 1 time.
✓ Branch 711 → 712 taken 1 time.
✗ Branch 711 → 1629 not taken.
✗ Branch 1589 → 1590 not taken.
✗ Branch 1589 → 1592 not taken.
8 assert((algo->GetOptionScalar<std::string>("t2a", {"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "lizard"}) == "iguana"));
122
10/20
✓ Branch 712 → 713 taken 1 time.
✗ Branch 712 → 1629 not taken.
✓ Branch 713 → 714 taken 1 time.
✗ Branch 713 → 1629 not taken.
✓ Branch 714 → 715 taken 1 time.
✗ Branch 714 → 1623 not taken.
✓ Branch 719 → 720 taken 1 time.
✗ Branch 719 → 1615 not taken.
✓ Branch 720 → 721 taken 1 time.
✗ Branch 720 → 1613 not taken.
✓ Branch 721 → 722 taken 1 time.
✗ Branch 721 → 1607 not taken.
✗ Branch 722 → 723 not taken.
✓ Branch 722 → 724 taken 1 time.
✓ Branch 731 → 732 taken 4 times.
✓ Branch 731 → 734 taken 1 time.
✓ Branch 741 → 742 taken 1 time.
✗ Branch 741 → 1665 not taken.
✗ Branch 1616 → 1617 not taken.
✗ Branch 1616 → 1619 not taken.
8 assert((algo->GetOptionScalar<int>("t2b", {"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "number"}) == 7));
123
14/30
✓ Branch 742 → 743 taken 1 time.
✗ Branch 742 → 1665 not taken.
✓ Branch 743 → 744 taken 1 time.
✗ Branch 743 → 1665 not taken.
✓ Branch 744 → 745 taken 1 time.
✗ Branch 744 → 1659 not taken.
✓ Branch 748 → 749 taken 1 time.
✗ Branch 748 → 1656 not taken.
✓ Branch 749 → 750 taken 1 time.
✗ Branch 749 → 1656 not taken.
✓ Branch 750 → 751 taken 1 time.
✗ Branch 750 → 1650 not taken.
✓ Branch 754 → 755 taken 1 time.
✗ Branch 754 → 1642 not taken.
✓ Branch 755 → 756 taken 1 time.
✗ Branch 755 → 1640 not taken.
✓ Branch 756 → 757 taken 1 time.
✗ Branch 756 → 1634 not taken.
✗ Branch 757 → 758 not taken.
✓ Branch 757 → 759 taken 1 time.
✓ Branch 766 → 767 taken 5 times.
✓ Branch 766 → 769 taken 1 time.
✗ Branch 776 → 777 not taken.
✓ Branch 776 → 778 taken 1 time.
✓ Branch 783 → 784 taken 1 time.
✗ Branch 783 → 1701 not taken.
✗ Branch 1643 → 1644 not taken.
✗ Branch 1643 → 1646 not taken.
✗ Branch 1656 → 1657 not taken.
✗ Branch 1656 → 1658 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 784 → 785 taken 1 time.
✗ Branch 784 → 1701 not taken.
✓ Branch 785 → 786 taken 1 time.
✗ Branch 785 → 1701 not taken.
✓ Branch 786 → 787 taken 1 time.
✗ Branch 786 → 1695 not taken.
✓ Branch 790 → 791 taken 1 time.
✗ Branch 790 → 1692 not taken.
✓ Branch 791 → 792 taken 1 time.
✗ Branch 791 → 1692 not taken.
✓ Branch 792 → 793 taken 1 time.
✗ Branch 792 → 1686 not taken.
✓ Branch 796 → 797 taken 1 time.
✗ Branch 796 → 1678 not taken.
✓ Branch 797 → 798 taken 1 time.
✗ Branch 797 → 1676 not taken.
✓ Branch 798 → 799 taken 1 time.
✗ Branch 798 → 1670 not taken.
✗ Branch 799 → 800 not taken.
✓ Branch 799 → 801 taken 1 time.
✓ Branch 808 → 809 taken 5 times.
✓ Branch 808 → 811 taken 1 time.
✗ Branch 818 → 819 not taken.
✓ Branch 818 → 820 taken 1 time.
✓ Branch 825 → 826 taken 1 time.
✗ Branch 825 → 1737 not taken.
✗ Branch 1679 → 1680 not taken.
✗ Branch 1679 → 1682 not taken.
✗ Branch 1692 → 1693 not taken.
✗ Branch 1692 → 1694 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 826 → 827 taken 1 time.
✗ Branch 826 → 1737 not taken.
✓ Branch 827 → 828 taken 1 time.
✗ Branch 827 → 1737 not taken.
✓ Branch 828 → 829 taken 1 time.
✗ Branch 828 → 1731 not taken.
✓ Branch 832 → 833 taken 1 time.
✗ Branch 832 → 1728 not taken.
✓ Branch 833 → 834 taken 1 time.
✗ Branch 833 → 1728 not taken.
✓ Branch 834 → 835 taken 1 time.
✗ Branch 834 → 1722 not taken.
✓ Branch 838 → 839 taken 1 time.
✗ Branch 838 → 1714 not taken.
✓ Branch 839 → 840 taken 1 time.
✗ Branch 839 → 1712 not taken.
✓ Branch 840 → 841 taken 1 time.
✗ Branch 840 → 1706 not taken.
✗ Branch 841 → 842 not taken.
✓ Branch 841 → 843 taken 1 time.
✓ Branch 850 → 851 taken 5 times.
✓ Branch 850 → 853 taken 1 time.
✗ Branch 860 → 861 not taken.
✓ Branch 860 → 862 taken 1 time.
✓ Branch 867 → 868 taken 1 time.
✗ Branch 867 → 1764 not taken.
✗ Branch 1715 → 1716 not taken.
✗ Branch 1715 → 1718 not taken.
✗ Branch 1728 → 1729 not taken.
✗ Branch 1728 → 1730 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 868 → 869 taken 1 time.
✗ Branch 868 → 1764 not taken.
✓ Branch 869 → 870 taken 1 time.
✗ Branch 869 → 1764 not taken.
✓ Branch 870 → 871 taken 1 time.
✗ Branch 870 → 1758 not taken.
✓ Branch 874 → 875 taken 1 time.
✗ Branch 874 → 1750 not taken.
✓ Branch 875 → 876 taken 1 time.
✗ Branch 875 → 1748 not taken.
✓ Branch 876 → 877 taken 1 time.
✗ Branch 876 → 1742 not taken.
✗ Branch 877 → 878 not taken.
✓ Branch 877 → 879 taken 1 time.
✓ Branch 886 → 887 taken 3 times.
✓ Branch 886 → 889 taken 1 time.
✓ Branch 896 → 897 taken 1 time.
✗ Branch 896 → 1791 not taken.
✗ Branch 1751 → 1752 not taken.
✗ Branch 1751 → 1754 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 897 → 898 taken 1 time.
✗ Branch 897 → 1791 not taken.
✓ Branch 898 → 899 taken 1 time.
✗ Branch 898 → 1791 not taken.
✓ Branch 899 → 900 taken 1 time.
✗ Branch 899 → 1785 not taken.
✓ Branch 903 → 904 taken 1 time.
✗ Branch 903 → 1777 not taken.
✓ Branch 904 → 905 taken 1 time.
✗ Branch 904 → 1775 not taken.
✓ Branch 905 → 906 taken 1 time.
✗ Branch 905 → 1769 not taken.
✗ Branch 906 → 907 not taken.
✓ Branch 906 → 908 taken 1 time.
✓ Branch 915 → 916 taken 3 times.
✓ Branch 915 → 918 taken 1 time.
✓ Branch 925 → 926 taken 1 time.
✗ Branch 925 → 1818 not taken.
✗ Branch 1778 → 1779 not taken.
✗ Branch 1778 → 1781 not taken.
✗ Branch 1830 → 1831 not taken.
✗ Branch 1830 → 1833 not taken.
7 assert((algo->GetOptionScalar<int>("t3a", {"tree3", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
129 try {
130
8/18
✓ Branch 926 → 927 taken 1 time.
✗ Branch 926 → 1818 not taken.
✓ Branch 927 → 928 taken 1 time.
✗ Branch 927 → 1818 not taken.
✓ Branch 928 → 929 taken 1 time.
✗ Branch 928 → 1812 not taken.
✓ Branch 932 → 933 taken 1 time.
✗ Branch 932 → 1804 not taken.
✓ Branch 933 → 934 taken 1 time.
✗ Branch 933 → 1802 not taken.
✗ Branch 934 → 935 not taken.
✓ Branch 934 → 1796 taken 1 time.
✗ Branch 935 → 936 not taken.
✗ Branch 935 → 937 not taken.
✗ Branch 944 → 945 not taken.
✗ Branch 944 → 947 not taken.
✓ Branch 1805 → 1806 taken 3 times.
✓ Branch 1805 → 1808 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 1823 → 1824 not taken.
✓ Branch 1823 → 1825 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 1203 → 1204 not taken.
✗ Branch 1203 → 1206 not taken.
✗ 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 1295 → 1296 not taken.
✗ Branch 1295 → 1298 not taken.
✗ Branch 1387 → 1388 not taken.
✗ Branch 1387 → 1390 not taken.
✗ Branch 1414 → 1415 not taken.
✗ Branch 1414 → 1417 not taken.
✗ Branch 1441 → 1442 not taken.
✗ Branch 1441 → 1444 not taken.
✗ Branch 1468 → 1469 not taken.
✗ Branch 1468 → 1471 not taken.
✗ Branch 1495 → 1496 not taken.
✗ Branch 1495 → 1498 not taken.
✗ Branch 1522 → 1523 not taken.
✗ Branch 1522 → 1525 not taken.
✗ Branch 1549 → 1550 not taken.
✗ Branch 1549 → 1552 not taken.
✗ Branch 1576 → 1577 not taken.
✗ Branch 1576 → 1579 not taken.
✗ Branch 1603 → 1604 not taken.
✗ Branch 1603 → 1606 not taken.
✗ Branch 1630 → 1631 not taken.
✗ Branch 1630 → 1633 not taken.
✗ Branch 1666 → 1667 not taken.
✗ Branch 1666 → 1669 not taken.
✗ Branch 1702 → 1703 not taken.
✗ Branch 1702 → 1705 not taken.
✗ Branch 1738 → 1739 not taken.
✗ Branch 1738 → 1741 not taken.
✗ Branch 1765 → 1766 not taken.
✗ Branch 1765 → 1768 not taken.
✗ Branch 1792 → 1793 not taken.
✗ Branch 1792 → 1795 not taken.
✗ Branch 1819 → 1820 not taken.
✓ Branch 1819 → 1822 taken 1 time.
4 }
146