GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 80.9% 76 / 0 / 94
Functions: 100.0% 1 / 0 / 1
Branches: 44.2% 310 / 0 / 702

src/iguana/tests/include/TestConfig.h
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 → 1464 not taken.
✓ Branch 7 → 8 taken 3 times.
✗ Branch 7 → 767 not taken.
3 bad_config.AddDirectory("non_existent_directory");
15 try {
16
2/4
✓ Branch 13 → 14 taken 3 times.
✗ Branch 13 → 779 not taken.
✗ Branch 14 → 15 not taken.
✓ Branch 14 → 773 taken 3 times.
3 bad_config.AddFile("non_existent_file.yaml");
17 }
18
1/2
✗ Branch 779 → 780 not taken.
✓ Branch 779 → 781 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 → 1464 not taken.
3 bad_config.PrintDirectories();
22
23 // then test configuring an algorithm
24
3/6
✓ Branch 22 → 23 taken 3 times.
✗ Branch 22 → 1464 not taken.
✓ Branch 23 → 24 taken 3 times.
✗ Branch 23 → 786 not taken.
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 3 times.
6 auto algo = iguana::AlgorithmFactory::Create("example::ExampleAlgorithm");
25
2/4
✗ Branch 29 → 30 not taken.
✓ Branch 29 → 31 taken 3 times.
✓ Branch 31 → 32 taken 3 times.
✗ Branch 31 → 1460 not taken.
3 algo->SetLogLevel(log_level);
26
3/6
✓ Branch 32 → 33 taken 3 times.
✗ Branch 32 → 1460 not taken.
✓ Branch 33 → 34 taken 3 times.
✗ Branch 33 → 792 not taken.
✓ Branch 39 → 40 taken 3 times.
✗ Branch 39 → 1460 not taken.
6 algo->SetConfigDirectory("src/iguana/tests"); // must be relative to build directory
27
2/4
✓ Branch 40 → 41 taken 3 times.
✗ Branch 40 → 798 not taken.
✓ Branch 46 → 47 taken 3 times.
✗ Branch 46 → 1460 not taken.
6 algo->SetConfigFile(fmt::format("test_{}.yaml", test_num));
28
1/2
✓ Branch 46 → 47 taken 3 times.
✗ Branch 46 → 1460 not taken.
3 algo->Start();
29
30
3/4
✓ Branch 47 → 48 taken 1 time.
✓ Branch 47 → 237 taken 1 time.
✓ Branch 47 → 344 taken 1 time.
✗ Branch 47 → 760 not taken.
3 switch(test_num) {
31
32 case 1: {
33 // test `GetOptionScalar`
34
6/12
✓ Branch 49 → 50 taken 1 time.
✗ Branch 49 → 806 not taken.
✓ Branch 50 → 51 taken 1 time.
✗ Branch 50 → 804 not taken.
✗ Branch 51 → 52 not taken.
✓ Branch 51 → 53 taken 1 time.
✓ Branch 55 → 56 taken 1 time.
✓ Branch 55 → 58 taken 1 time.
✓ Branch 58 → 59 taken 1 time.
✗ Branch 58 → 1460 not taken.
✗ Branch 807 → 808 not taken.
✗ Branch 807 → 810 not taken.
2 assert((algo->GetOptionScalar<int>({"scalar_int"}) == 1));
35
6/12
✓ Branch 59 → 60 taken 1 time.
✗ Branch 59 → 813 not taken.
✓ Branch 60 → 61 taken 1 time.
✗ Branch 60 → 811 not taken.
✗ Branch 61 → 62 not taken.
✓ Branch 61 → 63 taken 1 time.
✓ Branch 65 → 66 taken 1 time.
✓ Branch 65 → 68 taken 1 time.
✓ Branch 68 → 69 taken 1 time.
✗ Branch 68 → 1460 not taken.
✗ Branch 814 → 815 not taken.
✗ Branch 814 → 817 not taken.
2 assert((algo->GetOptionScalar<double>({"scalar_double"}) == 2.5));
36
5/10
✓ Branch 69 → 70 taken 1 time.
✗ Branch 69 → 820 not taken.
✓ Branch 70 → 71 taken 1 time.
✗ Branch 70 → 818 not taken.
✗ Branch 71 → 72 not taken.
✓ Branch 71 → 73 taken 1 time.
✓ Branch 80 → 81 taken 1 time.
✓ Branch 80 → 83 taken 1 time.
✗ Branch 821 → 822 not taken.
✗ Branch 821 → 824 not taken.
3 assert((algo->GetOptionScalar<std::string>({"scalar_string"}) == "lizard"));
37 // test `GetOptionVector`
38
7/16
✓ Branch 83 → 84 taken 1 time.
✗ Branch 83 → 1460 not taken.
✓ Branch 85 → 86 taken 1 time.
✗ Branch 85 → 827 not taken.
✓ Branch 86 → 87 taken 1 time.
✗ Branch 86 → 825 not taken.
✗ Branch 87 → 88 not taken.
✓ Branch 87 → 89 taken 1 time.
✓ Branch 94 → 95 taken 1 time.
✓ Branch 94 → 97 taken 1 time.
✓ Branch 97 → 98 taken 1 time.
✗ Branch 97 → 100 not taken.
✗ Branch 828 → 829 not taken.
✗ Branch 828 → 831 not taken.
✗ Branch 832 → 833 not taken.
✗ Branch 832 → 835 not taken.
4 assert((algo->GetOptionVector<int>({"vector_int"}) == std::vector<int>{1, 2, 3}));
39
7/16
✓ Branch 100 → 101 taken 1 time.
✗ Branch 100 → 1460 not taken.
✓ Branch 102 → 103 taken 1 time.
✗ Branch 102 → 838 not taken.
✓ Branch 103 → 104 taken 1 time.
✗ Branch 103 → 836 not taken.
✗ Branch 112 → 113 not taken.
✓ Branch 112 → 114 taken 1 time.
✓ Branch 119 → 120 taken 1 time.
✓ Branch 119 → 122 taken 1 time.
✓ Branch 122 → 123 taken 1 time.
✗ Branch 122 → 125 not taken.
✗ Branch 839 → 840 not taken.
✗ Branch 839 → 842 not taken.
✗ Branch 843 → 844 not taken.
✗ Branch 843 → 846 not taken.
5 assert((algo->GetOptionVector<double>({"vector_double"}) == std::vector<double>{1.5, 2.5}));
40
13/30
✓ Branch 126 → 127 taken 4 times.
✗ Branch 126 → 865 not taken.
✓ Branch 128 → 126 taken 4 times.
✓ Branch 128 → 129 taken 1 time.
✓ Branch 129 → 130 taken 1 time.
✗ Branch 129 → 856 not taken.
✓ Branch 131 → 132 taken 1 time.
✗ Branch 131 → 849 not taken.
✓ Branch 132 → 133 taken 1 time.
✗ Branch 132 → 847 not taken.
✗ Branch 133 → 134 not taken.
✓ Branch 133 → 135 taken 1 time.
✓ Branch 138 → 139 taken 1 time.
✓ Branch 138 → 141 taken 1 time.
✓ Branch 143 → 144 taken 4 times.
✓ Branch 143 → 150 taken 1 time.
✓ Branch 144 → 145 taken 4 times.
✗ Branch 144 → 147 not taken.
✓ Branch 150 → 151 taken 1 time.
✗ Branch 150 → 1460 not taken.
✗ Branch 850 → 851 not taken.
✗ Branch 850 → 853 not taken.
✗ Branch 857 → 858 not taken.
✗ Branch 857 → 864 not taken.
✗ Branch 858 → 859 not taken.
✗ Branch 858 → 861 not taken.
✗ Branch 866 → 867 not taken.
✗ Branch 866 → 873 not taken.
✗ Branch 867 → 868 not taken.
✗ Branch 867 → 870 not taken.
11 assert((algo->GetOptionVector<std::string>({"vector_string"}) == std::vector<std::string>{"spider", "bat", "chameleon", "spider"}));
41 // test `GetOptionSet`
42
5/10
✓ Branch 151 → 152 taken 1 time.
✗ Branch 151 → 876 not taken.
✓ Branch 152 → 153 taken 1 time.
✗ Branch 152 → 874 not taken.
✓ Branch 155 → 156 taken 1 time.
✓ Branch 155 → 158 taken 1 time.
✗ Branch 158 → 159 not taken.
✓ Branch 158 → 160 taken 1 time.
✗ Branch 877 → 878 not taken.
✗ Branch 877 → 880 not taken.
2 auto s = algo->GetOptionSet<std::string>({"vector_string"});
43
1/2
✗ Branch 158 → 159 not taken.
✓ Branch 158 → 160 taken 1 time.
1 assert((s.size() == 3));
44
2/4
✓ Branch 160 → 161 taken 1 time.
✗ Branch 160 → 977 not taken.
✗ Branch 161 → 162 not taken.
✓ Branch 161 → 163 taken 1 time.
1 assert((s.find("spider") != s.end()));
45
3/6
✓ Branch 168 → 169 taken 1 time.
✗ Branch 168 → 977 not taken.
✗ Branch 169 → 170 not taken.
✓ Branch 169 → 171 taken 1 time.
✓ Branch 176 → 177 taken 1 time.
✗ Branch 176 → 888 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
4/8
✓ Branch 177 → 178 taken 1 time.
✗ Branch 177 → 883 not taken.
✗ Branch 178 → 179 not taken.
✓ Branch 178 → 881 taken 1 time.
✗ Branch 181 → 182 not taken.
✗ Branch 181 → 184 not taken.
✓ Branch 884 → 885 taken 1 time.
✓ Branch 884 → 887 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 888 → 889 not taken.
✓ Branch 888 → 890 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
4/8
✗ Branch 186 → 187 not taken.
✓ Branch 186 → 897 taken 1 time.
✗ Branch 192 → 193 not taken.
✗ Branch 192 → 195 not taken.
✓ Branch 894 → 186 taken 1 time.
✗ Branch 894 → 899 not taken.
✓ Branch 900 → 901 taken 1 time.
✓ Branch 900 → 903 taken 1 time.
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 904 → 905 not taken.
✓ Branch 904 → 906 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
4/8
✗ Branch 197 → 198 not taken.
✓ Branch 197 → 913 taken 1 time.
✗ Branch 201 → 202 not taken.
✗ Branch 201 → 204 not taken.
✓ Branch 910 → 197 taken 1 time.
✗ Branch 910 → 915 not taken.
✓ Branch 916 → 917 taken 1 time.
✓ Branch 916 → 919 taken 1 time.
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 920 → 921 not taken.
✓ Branch 920 → 922 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
4/8
✗ Branch 206 → 207 not taken.
✓ Branch 206 → 929 taken 1 time.
✗ Branch 209 → 210 not taken.
✗ Branch 209 → 212 not taken.
✓ Branch 926 → 206 taken 1 time.
✗ Branch 926 → 931 not taken.
✓ Branch 932 → 933 taken 1 time.
✓ Branch 932 → 935 taken 1 time.
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 936 → 937 not taken.
✓ Branch 936 → 938 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
4/8
✗ Branch 214 → 215 not taken.
✓ Branch 214 → 945 taken 1 time.
✗ Branch 220 → 221 not taken.
✗ Branch 220 → 223 not taken.
✓ Branch 942 → 214 taken 1 time.
✗ Branch 942 → 947 not taken.
✓ Branch 948 → 949 taken 1 time.
✓ Branch 948 → 951 taken 1 time.
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 952 → 953 not taken.
✓ Branch 952 → 954 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
4/8
✗ Branch 225 → 226 not taken.
✓ Branch 225 → 961 taken 1 time.
✗ Branch 229 → 230 not taken.
✗ Branch 229 → 232 not taken.
✓ Branch 958 → 225 taken 1 time.
✗ Branch 958 → 963 not taken.
✓ Branch 964 → 965 taken 1 time.
✓ Branch 964 → 967 taken 1 time.
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 968 → 969 not taken.
✓ Branch 968 → 970 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
6/12
✓ Branch 239 → 240 taken 1 time.
✗ Branch 239 → 981 not taken.
✓ Branch 240 → 241 taken 1 time.
✗ Branch 240 → 979 not taken.
✗ Branch 241 → 242 not taken.
✓ Branch 241 → 243 taken 1 time.
✓ Branch 245 → 246 taken 2 times.
✓ Branch 245 → 248 taken 1 time.
✓ Branch 248 → 249 taken 1 time.
✗ Branch 248 → 998 not taken.
✗ Branch 982 → 983 not taken.
✗ Branch 982 → 985 not taken.
3 assert((algo->GetOptionScalar<double>({"tree1", "scalar1"}) == 1.5));
101
6/12
✓ Branch 250 → 251 taken 1 time.
✗ Branch 250 → 993 not taken.
✓ Branch 251 → 252 taken 1 time.
✗ Branch 251 → 991 not taken.
✗ Branch 252 → 253 not taken.
✓ Branch 252 → 254 taken 1 time.
✓ Branch 256 → 257 taken 2 times.
✓ Branch 256 → 259 taken 1 time.
✓ Branch 259 → 260 taken 1 time.
✗ Branch 259 → 1010 not taken.
✗ Branch 994 → 995 not taken.
✗ Branch 994 → 997 not taken.
3 assert((algo->GetOptionScalar<double>({"tree1", "scalar2"}) == 2.5));
102
5/10
✓ Branch 262 → 263 taken 1 time.
✗ Branch 262 → 1005 not taken.
✓ Branch 263 → 264 taken 1 time.
✗ Branch 263 → 1003 not taken.
✗ Branch 264 → 265 not taken.
✓ Branch 264 → 266 taken 1 time.
✓ Branch 268 → 269 taken 3 times.
✓ Branch 268 → 271 taken 1 time.
✗ Branch 1006 → 1007 not taken.
✗ Branch 1006 → 1009 not taken.
4 assert((algo->GetOptionScalar<double>({"tree2", "tree1", "scalar1"}) == 3.5));
103
12/28
✓ Branch 272 → 273 taken 2 times.
✗ Branch 272 → 1038 not taken.
✓ Branch 274 → 272 taken 2 times.
✓ Branch 274 → 275 taken 1 time.
✓ Branch 275 → 276 taken 1 time.
✗ Branch 275 → 1029 not taken.
✓ Branch 280 → 281 taken 1 time.
✗ Branch 280 → 1017 not taken.
✓ Branch 281 → 282 taken 1 time.
✗ Branch 281 → 1015 not taken.
✗ Branch 282 → 283 not taken.
✓ Branch 282 → 284 taken 1 time.
✓ Branch 287 → 288 taken 4 times.
✓ Branch 287 → 290 taken 1 time.
✓ Branch 292 → 293 taken 2 times.
✓ Branch 292 → 299 taken 1 time.
✓ Branch 293 → 294 taken 2 times.
✗ Branch 293 → 296 not taken.
✗ Branch 1018 → 1019 not taken.
✗ Branch 1018 → 1021 not taken.
✗ Branch 1030 → 1031 not taken.
✗ Branch 1030 → 1037 not taken.
✗ Branch 1031 → 1032 not taken.
✗ Branch 1031 → 1034 not taken.
✗ Branch 1039 → 1040 not taken.
✗ Branch 1039 → 1046 not taken.
✗ Branch 1040 → 1041 not taken.
✗ Branch 1040 → 1043 not taken.
10 assert((algo->GetOptionVector<std::string>({"tree2", "tree2", "tree3", "vector1"}) == std::vector<std::string>{"gecko", "snake"}));
104
7/16
✓ Branch 299 → 300 taken 1 time.
✗ Branch 299 → 1460 not taken.
✓ Branch 302 → 303 taken 1 time.
✗ Branch 302 → 1049 not taken.
✓ Branch 303 → 304 taken 1 time.
✗ Branch 303 → 1047 not taken.
✗ Branch 304 → 305 not taken.
✓ Branch 304 → 306 taken 1 time.
✓ Branch 311 → 312 taken 2 times.
✓ Branch 311 → 314 taken 1 time.
✓ Branch 314 → 315 taken 1 time.
✗ Branch 314 → 317 not taken.
✗ Branch 1050 → 1051 not taken.
✗ Branch 1050 → 1053 not taken.
✗ Branch 1059 → 1060 not taken.
✗ Branch 1059 → 1062 not taken.
5 assert((algo->GetOptionVector<int>({"tree2", "vector2"}) == std::vector<int>{3, -4, 5}));
105
12/28
✓ Branch 318 → 319 taken 1 time.
✗ Branch 318 → 1081 not taken.
✓ Branch 320 → 318 taken 1 time.
✓ Branch 320 → 321 taken 1 time.
✓ Branch 321 → 322 taken 1 time.
✗ Branch 321 → 1072 not taken.
✓ Branch 323 → 324 taken 1 time.
✗ Branch 323 → 1065 not taken.
✓ Branch 324 → 325 taken 1 time.
✗ Branch 324 → 1063 not taken.
✗ Branch 325 → 326 not taken.
✓ Branch 325 → 327 taken 1 time.
✓ Branch 330 → 331 taken 1 time.
✓ Branch 330 → 333 taken 1 time.
✓ Branch 335 → 336 taken 1 time.
✓ Branch 335 → 342 taken 1 time.
✓ Branch 336 → 337 taken 1 time.
✗ Branch 336 → 339 not taken.
✗ Branch 1066 → 1067 not taken.
✗ Branch 1066 → 1069 not taken.
✗ Branch 1073 → 1074 not taken.
✗ Branch 1073 → 1080 not taken.
✗ Branch 1074 → 1075 not taken.
✗ Branch 1074 → 1077 not taken.
✗ Branch 1082 → 1083 not taken.
✗ Branch 1082 → 1089 not taken.
✗ Branch 1083 → 1084 not taken.
✗ Branch 1083 → 1086 not taken.
5 assert((algo->GetOptionVector<std::string>({"vector1"}) == std::vector<std::string>{"bee"}));
106 1 break;
107 }
108
109 case 3: {
110 // test InRange tree1
111
9/18
✓ Branch 345 → 346 taken 1 time.
✗ Branch 345 → 1106 not taken.
✓ Branch 346 → 347 taken 1 time.
✗ Branch 346 → 1106 not taken.
✓ Branch 347 → 348 taken 1 time.
✗ Branch 347 → 1100 not taken.
✓ Branch 351 → 352 taken 1 time.
✗ Branch 351 → 1092 not taken.
✓ Branch 352 → 353 taken 1 time.
✗ Branch 352 → 1090 not taken.
✗ Branch 353 → 354 not taken.
✓ Branch 353 → 355 taken 1 time.
✓ Branch 357 → 358 taken 3 times.
✓ Branch 357 → 360 taken 1 time.
✓ Branch 367 → 368 taken 1 time.
✗ Branch 367 → 1127 not taken.
✗ Branch 1093 → 1094 not taken.
✗ Branch 1093 → 1096 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 1), "val"}) == 3));
112
9/18
✓ Branch 368 → 369 taken 1 time.
✗ Branch 368 → 1127 not taken.
✓ Branch 369 → 370 taken 1 time.
✗ Branch 369 → 1127 not taken.
✓ Branch 370 → 371 taken 1 time.
✗ Branch 370 → 1121 not taken.
✓ Branch 374 → 375 taken 1 time.
✗ Branch 374 → 1113 not taken.
✓ Branch 375 → 376 taken 1 time.
✗ Branch 375 → 1111 not taken.
✗ Branch 376 → 377 not taken.
✓ Branch 376 → 378 taken 1 time.
✓ Branch 380 → 381 taken 3 times.
✓ Branch 380 → 383 taken 1 time.
✓ Branch 390 → 391 taken 1 time.
✗ Branch 390 → 1148 not taken.
✗ Branch 1114 → 1115 not taken.
✗ Branch 1114 → 1117 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
113
9/18
✓ Branch 391 → 392 taken 1 time.
✗ Branch 391 → 1148 not taken.
✓ Branch 392 → 393 taken 1 time.
✗ Branch 392 → 1148 not taken.
✓ Branch 393 → 394 taken 1 time.
✗ Branch 393 → 1142 not taken.
✓ Branch 397 → 398 taken 1 time.
✗ Branch 397 → 1134 not taken.
✓ Branch 398 → 399 taken 1 time.
✗ Branch 398 → 1132 not taken.
✗ Branch 399 → 400 not taken.
✓ Branch 399 → 401 taken 1 time.
✓ Branch 403 → 404 taken 3 times.
✓ Branch 403 → 406 taken 1 time.
✓ Branch 413 → 414 taken 1 time.
✗ Branch 413 → 1169 not taken.
✗ Branch 1135 → 1136 not taken.
✗ Branch 1135 → 1138 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 5), "val"}) == 3)); // at a border
114
9/18
✓ Branch 414 → 415 taken 1 time.
✗ Branch 414 → 1169 not taken.
✓ Branch 415 → 416 taken 1 time.
✗ Branch 415 → 1169 not taken.
✓ Branch 416 → 417 taken 1 time.
✗ Branch 416 → 1163 not taken.
✓ Branch 420 → 421 taken 1 time.
✗ Branch 420 → 1155 not taken.
✓ Branch 421 → 422 taken 1 time.
✗ Branch 421 → 1153 not taken.
✗ Branch 422 → 423 not taken.
✓ Branch 422 → 424 taken 1 time.
✓ Branch 426 → 427 taken 3 times.
✓ Branch 426 → 429 taken 1 time.
✓ Branch 436 → 437 taken 1 time.
✗ Branch 436 → 1190 not taken.
✗ Branch 1156 → 1157 not taken.
✗ Branch 1156 → 1159 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 6), "val"}) == 4));
115
9/18
✓ Branch 437 → 438 taken 1 time.
✗ Branch 437 → 1190 not taken.
✓ Branch 438 → 439 taken 1 time.
✗ Branch 438 → 1190 not taken.
✓ Branch 439 → 440 taken 1 time.
✗ Branch 439 → 1184 not taken.
✓ Branch 443 → 444 taken 1 time.
✗ Branch 443 → 1176 not taken.
✓ Branch 444 → 445 taken 1 time.
✗ Branch 444 → 1174 not taken.
✗ Branch 445 → 446 not taken.
✓ Branch 445 → 447 taken 1 time.
✓ Branch 449 → 450 taken 3 times.
✓ Branch 449 → 452 taken 1 time.
✓ Branch 459 → 460 taken 1 time.
✗ Branch 459 → 1211 not taken.
✗ Branch 1177 → 1178 not taken.
✗ Branch 1177 → 1180 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 10), "val"}) == 4));
116
9/18
✓ Branch 460 → 461 taken 1 time.
✗ Branch 460 → 1211 not taken.
✓ Branch 461 → 462 taken 1 time.
✗ Branch 461 → 1211 not taken.
✓ Branch 462 → 463 taken 1 time.
✗ Branch 462 → 1205 not taken.
✓ Branch 466 → 467 taken 1 time.
✗ Branch 466 → 1197 not taken.
✓ Branch 467 → 468 taken 1 time.
✗ Branch 467 → 1195 not taken.
✗ Branch 468 → 469 not taken.
✓ Branch 468 → 470 taken 1 time.
✓ Branch 472 → 473 taken 3 times.
✓ Branch 472 → 475 taken 1 time.
✓ Branch 482 → 483 taken 1 time.
✗ Branch 482 → 1232 not taken.
✗ Branch 1198 → 1199 not taken.
✗ Branch 1198 → 1201 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 11), "val"}) == 0)); // default fallback
117
9/18
✓ Branch 483 → 484 taken 1 time.
✗ Branch 483 → 1232 not taken.
✓ Branch 484 → 485 taken 1 time.
✗ Branch 484 → 1232 not taken.
✓ Branch 485 → 486 taken 1 time.
✗ Branch 485 → 1226 not taken.
✓ Branch 489 → 490 taken 1 time.
✗ Branch 489 → 1218 not taken.
✓ Branch 490 → 491 taken 1 time.
✗ Branch 490 → 1216 not taken.
✗ Branch 491 → 492 not taken.
✓ Branch 491 → 493 taken 1 time.
✓ Branch 495 → 496 taken 3 times.
✓ Branch 495 → 498 taken 1 time.
✓ Branch 505 → 506 taken 1 time.
✗ Branch 505 → 1253 not taken.
✗ Branch 1219 → 1220 not taken.
✗ Branch 1219 → 1222 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 10.1), "val"}) == 0)); // wrong type
118
9/18
✓ Branch 506 → 507 taken 1 time.
✗ Branch 506 → 1253 not taken.
✓ Branch 507 → 508 taken 1 time.
✗ Branch 507 → 1253 not taken.
✓ Branch 508 → 509 taken 1 time.
✗ Branch 508 → 1247 not taken.
✓ Branch 512 → 513 taken 1 time.
✗ Branch 512 → 1239 not taken.
✓ Branch 513 → 514 taken 1 time.
✗ Branch 513 → 1237 not taken.
✗ Branch 514 → 515 not taken.
✓ Branch 514 → 516 taken 1 time.
✓ Branch 518 → 519 taken 3 times.
✓ Branch 518 → 521 taken 1 time.
✓ Branch 528 → 529 taken 1 time.
✗ Branch 528 → 1274 not taken.
✗ Branch 1240 → 1241 not taken.
✗ Branch 1240 → 1243 not taken.
6 assert((algo->GetOptionScalar<int>({"tree1", algo->GetConfig()->InRange("test_range", 3.7), "val"}) == 3)); // wrong type
119 // test InRange tree2
120
9/18
✓ Branch 529 → 530 taken 1 time.
✗ Branch 529 → 1274 not taken.
✓ Branch 530 → 531 taken 1 time.
✗ Branch 530 → 1274 not taken.
✓ Branch 531 → 532 taken 1 time.
✗ Branch 531 → 1268 not taken.
✓ Branch 536 → 537 taken 1 time.
✗ Branch 536 → 1260 not taken.
✓ Branch 537 → 538 taken 1 time.
✗ Branch 537 → 1258 not taken.
✗ Branch 538 → 539 not taken.
✓ Branch 538 → 540 taken 1 time.
✓ Branch 547 → 548 taken 4 times.
✓ Branch 547 → 550 taken 1 time.
✓ Branch 557 → 558 taken 1 time.
✗ Branch 557 → 1295 not taken.
✗ Branch 1261 → 1262 not taken.
✗ Branch 1261 → 1264 not taken.
8 assert((algo->GetOptionScalar<std::string>({"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "lizard"}) == "iguana"));
121
9/18
✓ Branch 558 → 559 taken 1 time.
✗ Branch 558 → 1295 not taken.
✓ Branch 559 → 560 taken 1 time.
✗ Branch 559 → 1295 not taken.
✓ Branch 560 → 561 taken 1 time.
✗ Branch 560 → 1289 not taken.
✓ Branch 565 → 566 taken 1 time.
✗ Branch 565 → 1281 not taken.
✓ Branch 566 → 567 taken 1 time.
✗ Branch 566 → 1279 not taken.
✗ Branch 567 → 568 not taken.
✓ Branch 567 → 569 taken 1 time.
✓ Branch 571 → 572 taken 4 times.
✓ Branch 571 → 574 taken 1 time.
✓ Branch 581 → 582 taken 1 time.
✗ Branch 581 → 1325 not taken.
✗ Branch 1282 → 1283 not taken.
✗ Branch 1282 → 1285 not taken.
7 assert((algo->GetOptionScalar<int>({"tree2", algo->GetConfig()->InRange("test_range", 1.9), "subtree", "number"}) == 7));
122
13/28
✓ Branch 582 → 583 taken 1 time.
✗ Branch 582 → 1325 not taken.
✓ Branch 583 → 584 taken 1 time.
✗ Branch 583 → 1325 not taken.
✓ Branch 584 → 585 taken 1 time.
✗ Branch 584 → 1319 not taken.
✓ Branch 588 → 589 taken 1 time.
✗ Branch 588 → 1316 not taken.
✓ Branch 589 → 590 taken 1 time.
✗ Branch 589 → 1316 not taken.
✓ Branch 590 → 591 taken 1 time.
✗ Branch 590 → 1310 not taken.
✓ Branch 594 → 595 taken 1 time.
✗ Branch 594 → 1302 not taken.
✓ Branch 595 → 596 taken 1 time.
✗ Branch 595 → 1300 not taken.
✗ Branch 596 → 597 not taken.
✓ Branch 596 → 598 taken 1 time.
✓ Branch 600 → 601 taken 5 times.
✓ Branch 600 → 603 taken 1 time.
✗ Branch 610 → 611 not taken.
✓ Branch 610 → 612 taken 1 time.
✓ Branch 617 → 618 taken 1 time.
✗ Branch 617 → 1355 not taken.
✗ Branch 1303 → 1304 not taken.
✗ Branch 1303 → 1306 not taken.
✗ Branch 1316 → 1317 not taken.
✗ Branch 1316 → 1318 not taken.
10 assert((algo->GetOptionScalar<int>({"tree2", algo->GetConfig()->InRange("test_range", 3.0), "subtree", algo->GetConfig()->InRange("sub_range", 1), "val"}) == 7));
123
13/28
✓ Branch 618 → 619 taken 1 time.
✗ Branch 618 → 1355 not taken.
✓ Branch 619 → 620 taken 1 time.
✗ Branch 619 → 1355 not taken.
✓ Branch 620 → 621 taken 1 time.
✗ Branch 620 → 1349 not taken.
✓ Branch 624 → 625 taken 1 time.
✗ Branch 624 → 1346 not taken.
✓ Branch 625 → 626 taken 1 time.
✗ Branch 625 → 1346 not taken.
✓ Branch 626 → 627 taken 1 time.
✗ Branch 626 → 1340 not taken.
✓ Branch 630 → 631 taken 1 time.
✗ Branch 630 → 1332 not taken.
✓ Branch 631 → 632 taken 1 time.
✗ Branch 631 → 1330 not taken.
✗ Branch 632 → 633 not taken.
✓ Branch 632 → 634 taken 1 time.
✓ Branch 636 → 637 taken 5 times.
✓ Branch 636 → 639 taken 1 time.
✗ Branch 646 → 647 not taken.
✓ Branch 646 → 648 taken 1 time.
✓ Branch 653 → 654 taken 1 time.
✗ Branch 653 → 1385 not taken.
✗ Branch 1333 → 1334 not taken.
✗ Branch 1333 → 1336 not taken.
✗ Branch 1346 → 1347 not taken.
✗ Branch 1346 → 1348 not taken.
10 assert((algo->GetOptionScalar<int>({"tree2", algo->GetConfig()->InRange("test_range", 3.0), "subtree", algo->GetConfig()->InRange("sub_range", 8), "val"}) == 8));
124
13/28
✓ Branch 654 → 655 taken 1 time.
✗ Branch 654 → 1385 not taken.
✓ Branch 655 → 656 taken 1 time.
✗ Branch 655 → 1385 not taken.
✓ Branch 656 → 657 taken 1 time.
✗ Branch 656 → 1379 not taken.
✓ Branch 660 → 661 taken 1 time.
✗ Branch 660 → 1376 not taken.
✓ Branch 661 → 662 taken 1 time.
✗ Branch 661 → 1376 not taken.
✓ Branch 662 → 663 taken 1 time.
✗ Branch 662 → 1370 not taken.
✓ Branch 666 → 667 taken 1 time.
✗ Branch 666 → 1362 not taken.
✓ Branch 667 → 668 taken 1 time.
✗ Branch 667 → 1360 not taken.
✗ Branch 668 → 669 not taken.
✓ Branch 668 → 670 taken 1 time.
✓ Branch 672 → 673 taken 5 times.
✓ Branch 672 → 675 taken 1 time.
✗ Branch 682 → 683 not taken.
✓ Branch 682 → 684 taken 1 time.
✓ Branch 689 → 690 taken 1 time.
✗ Branch 689 → 1406 not taken.
✗ Branch 1363 → 1364 not taken.
✗ Branch 1363 → 1366 not taken.
✗ Branch 1376 → 1377 not taken.
✗ Branch 1376 → 1378 not taken.
10 assert((algo->GetOptionScalar<int>({"tree2", algo->GetConfig()->InRange("test_range", 3.5), "subtree", algo->GetConfig()->InRange("sub_range", 11), "val"}) == 1));
125
9/18
✓ Branch 690 → 691 taken 1 time.
✗ Branch 690 → 1406 not taken.
✓ Branch 691 → 692 taken 1 time.
✗ Branch 691 → 1406 not taken.
✓ Branch 692 → 693 taken 1 time.
✗ Branch 692 → 1400 not taken.
✓ Branch 696 → 697 taken 1 time.
✗ Branch 696 → 1392 not taken.
✓ Branch 697 → 698 taken 1 time.
✗ Branch 697 → 1390 not taken.
✗ Branch 698 → 699 not taken.
✓ Branch 698 → 700 taken 1 time.
✓ Branch 702 → 703 taken 3 times.
✓ Branch 702 → 705 taken 1 time.
✓ Branch 712 → 713 taken 1 time.
✗ Branch 712 → 1427 not taken.
✗ Branch 1393 → 1394 not taken.
✗ Branch 1393 → 1396 not taken.
6 assert((algo->GetOptionScalar<int>({"tree2", algo->GetConfig()->InRange("test_range", 4.0), "subtree"}) == 10));
126 // test InRange tree3
127
9/20
✓ Branch 713 → 714 taken 1 time.
✗ Branch 713 → 1427 not taken.
✓ Branch 714 → 715 taken 1 time.
✗ Branch 714 → 1427 not taken.
✓ Branch 715 → 716 taken 1 time.
✗ Branch 715 → 1421 not taken.
✓ Branch 719 → 720 taken 1 time.
✗ Branch 719 → 1413 not taken.
✓ Branch 720 → 721 taken 1 time.
✗ Branch 720 → 1411 not taken.
✗ Branch 721 → 722 not taken.
✓ Branch 721 → 723 taken 1 time.
✓ Branch 725 → 726 taken 3 times.
✓ Branch 725 → 728 taken 1 time.
✓ Branch 735 → 736 taken 1 time.
✗ Branch 735 → 1448 not taken.
✗ Branch 1414 → 1415 not taken.
✗ Branch 1414 → 1417 not taken.
✗ Branch 1460 → 1461 not taken.
✗ Branch 1460 → 1463 not taken.
6 assert((algo->GetOptionScalar<int>({"tree3", algo->GetConfig()->InRange("test_range", 3), "val"}) == 3));
128 try {
129
7/16
✓ Branch 736 → 737 taken 1 time.
✗ Branch 736 → 1448 not taken.
✓ Branch 737 → 738 taken 1 time.
✗ Branch 737 → 1448 not taken.
✓ Branch 738 → 739 taken 1 time.
✗ Branch 738 → 1442 not taken.
✓ Branch 742 → 743 taken 1 time.
✗ Branch 742 → 1434 not taken.
✗ Branch 743 → 744 not taken.
✓ Branch 743 → 1432 taken 1 time.
✗ Branch 744 → 745 not taken.
✗ Branch 744 → 746 not taken.
✗ Branch 748 → 749 not taken.
✗ Branch 748 → 751 not taken.
✓ Branch 1435 → 1436 taken 3 times.
✓ Branch 1435 → 1438 taken 1 time.
6 assert((algo->GetOptionScalar<int>({"tree3", algo->GetConfig()->InRange("test_range", 11), "val"}) == 0));
130 fmt::print(stderr, "ERROR: accessing a missing default value for `InRange` did not throw exception\n");
131 return 1;
132 }
133
1/2
✗ Branch 1453 → 1454 not taken.
✓ Branch 1453 → 1455 taken 1 time.
1 catch(std::exception const& ex) {
134 1 fmt::print("SUCCESS: accessing a missing default value for `InRange` threw expected exception\n");
135 1 }
136 break;
137 }
138
139 default:
140 fmt::print(stderr, "ERROR: unknown test number '{}'", test_num);
141 return 1;
142 }
143 return 0;
144
1/42
✗ Branch 987 → 988 not taken.
✗ Branch 987 → 990 not taken.
✗ Branch 999 → 1000 not taken.
✗ Branch 999 → 1002 not taken.
✗ Branch 1011 → 1012 not taken.
✗ Branch 1011 → 1014 not taken.
✗ Branch 1023 → 1024 not taken.
✗ Branch 1023 → 1026 not taken.
✗ Branch 1055 → 1056 not taken.
✗ Branch 1055 → 1058 not taken.
✗ Branch 1107 → 1108 not taken.
✗ Branch 1107 → 1110 not taken.
✗ Branch 1128 → 1129 not taken.
✗ Branch 1128 → 1131 not taken.
✗ Branch 1149 → 1150 not taken.
✗ Branch 1149 → 1152 not taken.
✗ Branch 1170 → 1171 not taken.
✗ Branch 1170 → 1173 not taken.
✗ Branch 1191 → 1192 not taken.
✗ Branch 1191 → 1194 not taken.
✗ Branch 1212 → 1213 not taken.
✗ Branch 1212 → 1215 not taken.
✗ Branch 1233 → 1234 not taken.
✗ Branch 1233 → 1236 not taken.
✗ Branch 1254 → 1255 not taken.
✗ Branch 1254 → 1257 not taken.
✗ Branch 1275 → 1276 not taken.
✗ Branch 1275 → 1278 not taken.
✗ Branch 1296 → 1297 not taken.
✗ Branch 1296 → 1299 not taken.
✗ Branch 1326 → 1327 not taken.
✗ Branch 1326 → 1329 not taken.
✗ Branch 1356 → 1357 not taken.
✗ Branch 1356 → 1359 not taken.
✗ Branch 1386 → 1387 not taken.
✗ Branch 1386 → 1389 not taken.
✗ Branch 1407 → 1408 not taken.
✗ Branch 1407 → 1410 not taken.
✗ Branch 1428 → 1429 not taken.
✗ Branch 1428 → 1431 not taken.
✗ Branch 1449 → 1450 not taken.
✓ Branch 1449 → 1452 taken 1 time.
4 }
145