GCC Code Coverage Report


Directory: ./
File: src/iguana/tests/include/TestConfig.h
Date: 2025-06-06 22:09:53
Exec Total Coverage
Lines: 77 95 81.1%
Functions: 1 1 100.0%
Branches: 332 750 44.3%

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