| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #include "Algorithm.h" | ||
| 2 | |||
| 3 | namespace iguana { | ||
| 4 | |||
| 5 | 211 | hipo::banklist::size_type tools::GetBankIndex( | |
| 6 | hipo::banklist& banks, | ||
| 7 | std::string const& bank_name, | ||
| 8 | unsigned int const& variant) noexcept(false) | ||
| 9 | { | ||
| 10 | unsigned int num_found = 0; | ||
| 11 |
1/2✓ Branch 19 → 3 taken 717 times.
✗ Branch 19 → 20 not taken.
|
1434 | for(hipo::banklist::size_type i = 0; i < banks.size(); i++) { |
| 12 | 717 | auto& bank = banks.at(i); | |
| 13 |
4/4✓ Branch 7 → 8 taken 488 times.
✓ Branch 7 → 10 taken 229 times.
✓ Branch 12 → 13 taken 218 times.
✓ Branch 12 → 16 taken 499 times.
|
1434 | if(bank.getSchema().getName() == bank_name) { |
| 14 |
2/2✓ Branch 13 → 14 taken 211 times.
✓ Branch 13 → 15 taken 7 times.
|
218 | if(num_found == variant) |
| 15 | 211 | return i; | |
| 16 | 7 | num_found++; | |
| 17 | } | ||
| 18 | } | ||
| 19 | ✗ | throw std::runtime_error("GetBankIndex failed to find bank \"" + bank_name + "\""); | |
| 20 | } | ||
| 21 | |||
| 22 | /////////////////////////////////////////////////////////////////////////////// | ||
| 23 | |||
| 24 | 15 | void Algorithm::Start() | |
| 25 | { | ||
| 26 |
1/2✓ Branch 2 → 3 taken 15 times.
✗ Branch 2 → 5 not taken.
|
15 | m_rows_only = true; |
| 27 | hipo::banklist no_banks = {}; | ||
| 28 |
1/2✓ Branch 2 → 3 taken 15 times.
✗ Branch 2 → 5 not taken.
|
15 | Start(no_banks); |
| 29 | 15 | } | |
| 30 | |||
| 31 | /////////////////////////////////////////////////////////////////////////////// | ||
| 32 | |||
| 33 | template <typename OPTION_TYPE> | ||
| 34 | 140 | OPTION_TYPE Algorithm::GetOptionScalar(std::string const& key, YAMLReader::node_path_t node_path) const | |
| 35 | { | ||
| 36 | 140 | CompleteOptionNodePath(key, node_path); | |
| 37 | 140 | auto opt = GetCachedOption<OPTION_TYPE>(key); | |
| 38 |
4/6std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 87 times.
✓ Branch 4 → 11 taken 1 time.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 22 times.
✗ Branch 4 → 9 not taken.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 30 times.
✗ Branch 4 → 9 not taken.
|
140 | if(!opt.has_value()) { |
| 39 |
5/8std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 5 → 6 taken 87 times.
✗ Branch 5 → 44 not taken.
✓ Branch 6 → 7 taken 87 times.
✗ Branch 6 → 34 not taken.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 6 → 7 taken 22 times.
✗ Branch 6 → 26 not taken.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 6 → 7 taken 29 times.
✓ Branch 6 → 26 taken 1 time.
|
226 | opt = m_yaml_config->GetScalar<OPTION_TYPE>(node_path); |
| 40 | } | ||
| 41 |
4/6std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 25 taken 88 times.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 9 → 10 not taken.
✓ Branch 9 → 22 taken 22 times.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 9 → 10 taken 2 times.
✓ Branch 9 → 22 taken 27 times.
|
139 | if(!opt.has_value()) { |
| 42 |
3/18std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 36 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 20 not taken.
✗ Branch 36 → 37 not taken.
✗ Branch 36 → 39 not taken.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 28 not taken.
✗ Branch 14 → 15 not taken.
✗ Branch 14 → 17 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 31 not taken.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 13 → 14 taken 2 times.
✗ Branch 13 → 28 not taken.
✓ Branch 14 → 15 taken 1 time.
✓ Branch 14 → 17 taken 1 time.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 31 not taken.
|
2 | m_log->Error("Failed to `GetOptionScalar` for key {:?}", key); |
| 43 |
1/6std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 42 not taken.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 20 → 21 not taken.
✗ Branch 20 → 34 not taken.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 20 → 21 taken 2 times.
✗ Branch 20 → 34 not taken.
|
2 | throw std::runtime_error("config file parsing issue"); |
| 44 | } | ||
| 45 |
4/8std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > iguana::Algorithm::GetOptionScalar<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 25 → 26 taken 88 times.
✗ Branch 25 → 44 not taken.
✓ Branch 26 → 27 taken 88 times.
✗ Branch 26 → 28 not taken.
double iguana::Algorithm::GetOptionScalar<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 23 → 24 taken 22 times.
✗ Branch 23 → 25 not taken.
int iguana::Algorithm::GetOptionScalar<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 23 → 24 taken 27 times.
✗ Branch 23 → 25 not taken.
|
137 | PrintOptionValue(key, opt.value()); |
| 46 | 137 | return opt.value(); | |
| 47 | } | ||
| 48 | template int Algorithm::GetOptionScalar(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 49 | template double Algorithm::GetOptionScalar(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 50 | template std::string Algorithm::GetOptionScalar(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 51 | |||
| 52 | /////////////////////////////////////////////////////////////////////////////// | ||
| 53 | |||
| 54 | template <typename OPTION_TYPE> | ||
| 55 | 55 | std::vector<OPTION_TYPE> Algorithm::GetOptionVector(std::string const& key, YAMLReader::node_path_t node_path) const | |
| 56 | { | ||
| 57 | 55 | CompleteOptionNodePath(key, node_path); | |
| 58 | 55 | auto opt = GetCachedOption<std::vector<OPTION_TYPE>>(key); | |
| 59 |
4/6std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 5 times.
✗ Branch 4 → 13 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 28 times.
✗ Branch 4 → 11 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 4 → 5 taken 12 times.
✓ Branch 4 → 11 taken 10 times.
|
55 | if(!opt.has_value()) { |
| 60 |
6/12std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 5 → 6 taken 5 times.
✗ Branch 5 → 45 not taken.
✓ Branch 6 → 7 taken 5 times.
✗ Branch 6 → 35 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 5 → 6 taken 28 times.
✗ Branch 5 → 41 not taken.
✓ Branch 6 → 7 taken 28 times.
✗ Branch 6 → 31 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 5 → 6 taken 12 times.
✗ Branch 5 → 41 not taken.
✓ Branch 6 → 7 taken 12 times.
✗ Branch 6 → 31 not taken.
|
90 | opt = m_yaml_config->GetVector<OPTION_TYPE>(node_path); |
| 61 | } | ||
| 62 |
4/6std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 13 → 14 not taken.
✓ Branch 13 → 27 taken 5 times.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 25 taken 28 times.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 11 → 12 taken 4 times.
✓ Branch 11 → 25 taken 18 times.
|
55 | if(!opt.has_value()) { |
| 63 |
3/18std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 18 → 19 not taken.
✗ Branch 18 → 37 not taken.
✗ Branch 19 → 20 not taken.
✗ Branch 19 → 22 not taken.
✗ Branch 37 → 38 not taken.
✗ Branch 37 → 40 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 16 → 17 not taken.
✗ Branch 16 → 33 not taken.
✗ Branch 17 → 18 not taken.
✗ Branch 17 → 20 not taken.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 36 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 16 → 17 taken 4 times.
✗ Branch 16 → 33 not taken.
✓ Branch 17 → 18 taken 2 times.
✓ Branch 17 → 20 taken 2 times.
✗ Branch 33 → 34 not taken.
✗ Branch 33 → 36 not taken.
|
4 | m_log->Error("Failed to `GetOptionVector` for key {:?}", key); |
| 64 |
1/6std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 25 → 26 not taken.
✗ Branch 25 → 43 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 23 → 24 not taken.
✗ Branch 23 → 39 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 23 → 24 taken 4 times.
✗ Branch 23 → 39 not taken.
|
4 | throw std::runtime_error("config file parsing issue"); |
| 65 | } | ||
| 66 |
6/14std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 27 → 28 taken 5 times.
✗ Branch 27 → 45 not taken.
✓ Branch 28 → 29 taken 5 times.
✗ Branch 28 → 30 not taken.
✗ Branch 45 → 46 not taken.
✗ Branch 45 → 48 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 25 → 26 taken 28 times.
✗ Branch 25 → 41 not taken.
✓ Branch 26 → 27 taken 28 times.
✗ Branch 26 → 28 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 25 → 26 taken 18 times.
✗ Branch 25 → 41 not taken.
✓ Branch 26 → 27 taken 18 times.
✗ Branch 26 → 28 not taken.
|
55 | PrintOptionValue(key, opt.value()); |
| 67 |
3/6std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionVector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 29 → 31 taken 5 times.
✗ Branch 29 → 45 not taken.
std::vector<double, std::allocator<double> > iguana::Algorithm::GetOptionVector<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 27 → 29 taken 28 times.
✗ Branch 27 → 41 not taken.
std::vector<int, std::allocator<int> > iguana::Algorithm::GetOptionVector<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 27 → 29 taken 18 times.
✗ Branch 27 → 41 not taken.
|
102 | return opt.value(); |
| 68 | } | ||
| 69 | template std::vector<int> Algorithm::GetOptionVector(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 70 | template std::vector<double> Algorithm::GetOptionVector(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 71 | template std::vector<std::string> Algorithm::GetOptionVector(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 72 | |||
| 73 | /////////////////////////////////////////////////////////////////////////////// | ||
| 74 | |||
| 75 | template <typename OPTION_TYPE> | ||
| 76 | 17 | std::set<OPTION_TYPE> Algorithm::GetOptionSet(std::string const& key, YAMLReader::node_path_t node_path) const | |
| 77 | { | ||
| 78 |
3/6std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > iguana::Algorithm::GetOptionSet<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 11 not taken.
std::set<double, std::less<double>, std::allocator<double> > iguana::Algorithm::GetOptionSet<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✗ Branch 3 → 4 not taken.
✗ Branch 3 → 13 not taken.
std::set<int, std::less<int>, std::allocator<int> > iguana::Algorithm::GetOptionSet<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::deque<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> >, std::allocator<std::variant<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<YAML::Node (YAML::Node)> > > >) const:
✓ Branch 3 → 4 taken 14 times.
✓ Branch 3 → 13 taken 2 times.
|
17 | auto val_vec = GetOptionVector<OPTION_TYPE>(key, node_path); |
| 79 | std::set<OPTION_TYPE> val_set; | ||
| 80 | std::copy(val_vec.begin(), val_vec.end(), std::inserter(val_set, val_set.end())); | ||
| 81 | 15 | return val_set; | |
| 82 | 1 | } | |
| 83 | template std::set<int> Algorithm::GetOptionSet(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 84 | template std::set<double> Algorithm::GetOptionSet(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 85 | template std::set<std::string> Algorithm::GetOptionSet(std::string const& key, YAMLReader::node_path_t node_path) const; | ||
| 86 | |||
| 87 | /////////////////////////////////////////////////////////////////////////////// | ||
| 88 | |||
| 89 | 126 | void Algorithm::SetName(std::string_view name) | |
| 90 | { | ||
| 91 | 126 | Object::SetName(name); | |
| 92 |
1/2✗ Branch 3 → 4 not taken.
✓ Branch 3 → 14 taken 126 times.
|
126 | if(m_yaml_config) |
| 93 | ✗ | m_yaml_config->SetName("config|" + m_name); | |
| 94 | 126 | } | |
| 95 | |||
| 96 | /////////////////////////////////////////////////////////////////////////////// | ||
| 97 | |||
| 98 | 42 | std::unique_ptr<YAMLReader> const& Algorithm::GetConfig() const | |
| 99 | { | ||
| 100 | 42 | return m_yaml_config; | |
| 101 | } | ||
| 102 | |||
| 103 | /////////////////////////////////////////////////////////////////////////////// | ||
| 104 | |||
| 105 | ✗ | void Algorithm::SetConfig(std::unique_ptr<YAMLReader>&& yaml_config) | |
| 106 | { | ||
| 107 | m_yaml_config = std::move(yaml_config); | ||
| 108 | ✗ | } | |
| 109 | |||
| 110 | /////////////////////////////////////////////////////////////////////////////// | ||
| 111 | |||
| 112 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 6 times.
|
6 | void Algorithm::SetConfigFile(std::string const& name) |
| 113 | { | ||
| 114 |
4/8✓ Branch 5 → 6 taken 6 times.
✗ Branch 5 → 30 not taken.
✓ Branch 6 → 7 taken 6 times.
✗ Branch 6 → 24 not taken.
✓ Branch 18 → 19 taken 3 times.
✓ Branch 18 → 21 taken 3 times.
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 33 not taken.
|
12 | o_user_config_file = SetOption("config_file", name); |
| 115 | 6 | } | |
| 116 | |||
| 117 | /////////////////////////////////////////////////////////////////////////////// | ||
| 118 | |||
| 119 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 6 times.
|
6 | void Algorithm::SetConfigDirectory(std::string const& name) |
| 120 | { | ||
| 121 |
3/8✓ Branch 5 → 6 taken 6 times.
✗ Branch 5 → 30 not taken.
✓ Branch 6 → 7 taken 6 times.
✗ Branch 6 → 24 not taken.
✗ Branch 18 → 19 not taken.
✓ Branch 18 → 21 taken 6 times.
✗ Branch 30 → 31 not taken.
✗ Branch 30 → 33 not taken.
|
12 | o_user_config_dir = SetOption("config_dir", name); |
| 122 | 6 | } | |
| 123 | |||
| 124 | /////////////////////////////////////////////////////////////////////////////// | ||
| 125 | |||
| 126 |
1/2✓ Branch 2 → 3 taken 47 times.
✗ Branch 2 → 48 not taken.
|
47 | void Algorithm::ParseYAMLConfig() |
| 127 | { | ||
| 128 | |||
| 129 | // start YAMLReader instance, if not yet started | ||
| 130 |
1/2✓ Branch 2 → 3 taken 47 times.
✗ Branch 2 → 48 not taken.
|
47 | if(!m_yaml_config) { |
| 131 | // set config files and directories specified by `::SetConfigFile`, `::SetConfigDirectory`, etc. | ||
| 132 |
2/4✓ Branch 4 → 5 taken 47 times.
✗ Branch 4 → 86 not taken.
✓ Branch 5 → 6 taken 47 times.
✗ Branch 5 → 84 not taken.
|
47 | o_user_config_file = GetCachedOption<std::string>("config_file").value_or(""); |
| 133 |
2/4✓ Branch 19 → 20 taken 47 times.
✗ Branch 19 → 94 not taken.
✓ Branch 20 → 21 taken 47 times.
✗ Branch 20 → 92 not taken.
|
94 | o_user_config_dir = GetCachedOption<std::string>("config_dir").value_or(""); |
| 134 | 47 | m_log->Debug("Instantiating `YAMLReader`"); | |
| 135 |
1/2✓ Branch 35 → 36 taken 47 times.
✗ Branch 35 → 100 not taken.
|
94 | m_yaml_config = std::make_unique<YAMLReader>("config|" + m_name); |
| 136 | 47 | m_yaml_config->SetLogLevel(m_log->GetLevel()); // synchronize log levels | |
| 137 | 47 | m_yaml_config->AddDirectory(o_user_config_dir); | |
| 138 | 47 | m_yaml_config->AddFile(m_default_config_file); | |
| 139 | 47 | m_yaml_config->AddFile(o_user_config_file); | |
| 140 | } | ||
| 141 | else | ||
| 142 | ✗ | m_log->Debug("`YAMLReader` already instantiated for this algorithm; using that"); | |
| 143 | |||
| 144 | // parse the files | ||
| 145 | 47 | m_yaml_config->LoadFiles(); | |
| 146 | |||
| 147 | // if "log" was not set by `SetOption` (i.e., not in `m_option_cache`) | ||
| 148 | // - NB: not using `GetCachedOption<T>` here, since `T` can be a few different types for key=='log' | ||
| 149 |
2/2✓ Branch 60 → 61 taken 25 times.
✓ Branch 60 → 83 taken 22 times.
|
94 | if(m_option_cache.find("log") == m_option_cache.end()) { |
| 150 | // check if 'log' is set in the YAML node for this algorithm | ||
| 151 |
6/10✓ Branch 65 → 66 taken 25 times.
✗ Branch 65 → 108 not taken.
✓ Branch 66 → 67 taken 25 times.
✗ Branch 66 → 106 not taken.
✓ Branch 69 → 70 taken 50 times.
✓ Branch 69 → 72 taken 25 times.
✓ Branch 72 → 73 taken 3 times.
✓ Branch 72 → 81 taken 22 times.
✗ Branch 109 → 110 not taken.
✗ Branch 109 → 112 not taken.
|
75 | auto log_level_from_yaml = m_yaml_config->GetScalar<std::string>({m_class_name, "log"}); |
| 152 |
2/2✓ Branch 72 → 73 taken 3 times.
✓ Branch 72 → 81 taken 22 times.
|
25 | if(log_level_from_yaml) { |
| 153 |
1/2✓ Branch 75 → 76 taken 3 times.
✗ Branch 75 → 118 not taken.
|
3 | m_log->SetLevel(log_level_from_yaml.value()); |
| 154 |
2/4✓ Branch 76 → 77 taken 3 times.
✗ Branch 76 → 78 not taken.
✓ Branch 80 → 81 taken 3 times.
✗ Branch 80 → 118 not taken.
|
6 | m_yaml_config->SetLogLevel(log_level_from_yaml.value()); |
| 155 | } | ||
| 156 | } | ||
| 157 |
0/2✗ Branch 114 → 115 not taken.
✗ Branch 114 → 117 not taken.
|
47 | } |
| 158 | |||
| 159 | /////////////////////////////////////////////////////////////////////////////// | ||
| 160 | |||
| 161 | 8 | void Algorithm::StartRCDBReader() | |
| 162 | { | ||
| 163 |
1/2✓ Branch 6 → 7 taken 8 times.
✗ Branch 6 → 20 not taken.
|
24 | m_rcdb = std::make_unique<RCDBReader>("RCDB|" + GetName(), m_log->GetLevel()); |
| 164 | 8 | } | |
| 165 | |||
| 166 | /////////////////////////////////////////////////////////////////////////////// | ||
| 167 | |||
| 168 | 206 | hipo::banklist::size_type Algorithm::GetBankIndex(hipo::banklist& banks, std::string const& bank_name) const | |
| 169 | { | ||
| 170 |
2/2✓ Branch 2 → 3 taken 175 times.
✓ Branch 2 → 21 taken 31 times.
|
206 | if(m_rows_only) |
| 171 | return 0; | ||
| 172 | try { | ||
| 173 | // check if this bank was created by iguana | ||
| 174 | 175 | auto created_by_iguana = AlgorithmFactory::GetCreatorAlgorithms(bank_name); | |
| 175 | // get the index | ||
| 176 | 175 | auto idx = tools::GetBankIndex( | |
| 177 | banks, | ||
| 178 | bank_name, | ||
| 179 |
4/6✓ Branch 4 → 5 taken 35 times.
✓ Branch 4 → 6 taken 140 times.
✓ Branch 6 → 7 taken 175 times.
✗ Branch 6 → 28 not taken.
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 9 taken 175 times.
|
175 | created_by_iguana ? m_created_bank_variant : 0); |
| 180 |
5/10✓ Branch 11 → 12 taken 175 times.
✗ Branch 11 → 22 not taken.
✓ Branch 12 → 13 taken 105 times.
✓ Branch 12 → 15 taken 70 times.
✓ Branch 17 → 18 taken 35 times.
✓ Branch 17 → 20 taken 140 times.
✗ Branch 22 → 23 not taken.
✗ Branch 22 → 25 not taken.
✗ Branch 28 → 29 not taken.
✗ Branch 28 → 31 not taken.
|
350 | m_log->Debug("cached index of bank '{}' is {}", bank_name, idx); |
| 181 | return idx; | ||
| 182 | } | ||
| 183 | ✗ | catch(std::runtime_error const& ex) { | |
| 184 | ✗ | m_log->Error("required input bank '{}' not found; cannot `Start` algorithm '{}'", bank_name, m_class_name); | |
| 185 | ✗ | auto creators = AlgorithmFactory::GetCreatorAlgorithms(bank_name); | |
| 186 | ✗ | if(creators) | |
| 187 | ✗ | m_log->Error(" -> this bank is created by algorithm(s) [{}]; please `Start` ONE of them BEFORE this algorithm", fmt::join(creators.value(), ", ")); | |
| 188 | ✗ | throw std::runtime_error("cannot cache bank index"); | |
| 189 | ✗ | } | |
| 190 | } | ||
| 191 | |||
| 192 | /////////////////////////////////////////////////////////////////////////////// | ||
| 193 | |||
| 194 | 3 | hipo::banklist::size_type Algorithm::GetCreatedBankIndex(hipo::banklist& banks) const noexcept(false) | |
| 195 | { | ||
| 196 |
1/2✓ Branch 3 → 4 taken 3 times.
✗ Branch 3 → 10 not taken.
|
6 | return GetBankIndex(banks, GetCreatedBankName()); |
| 197 | } | ||
| 198 | |||
| 199 | /////////////////////////////////////////////////////////////////////////////// | ||
| 200 | |||
| 201 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 27 times.
|
27 | void Algorithm::PrintOptionValue(std::string const& key, int const& val, Logger::Level const level, std::string_view prefix) const |
| 202 | { | ||
| 203 |
4/8✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 27 times.
✓ Branch 5 → 6 taken 27 times.
✗ Branch 5 → 12 not taken.
✓ Branch 6 → 7 taken 23 times.
✓ Branch 6 → 9 taken 4 times.
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 15 not taken.
|
54 | m_log->Print(level, "{}: {:>20} = {} [int]", prefix, key, val); |
| 204 | 27 | } | |
| 205 | |||
| 206 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 22 times.
|
22 | void Algorithm::PrintOptionValue(std::string const& key, double const& val, Logger::Level const level, std::string_view prefix) const |
| 207 | { | ||
| 208 |
4/8✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 22 times.
✓ Branch 5 → 6 taken 22 times.
✗ Branch 5 → 12 not taken.
✓ Branch 6 → 7 taken 12 times.
✓ Branch 6 → 9 taken 10 times.
✗ Branch 12 → 13 not taken.
✗ Branch 12 → 15 not taken.
|
44 | m_log->Print(level, "{}: {:>20} = {} [double]", prefix, key, val); |
| 209 | 22 | } | |
| 210 | |||
| 211 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 88 times.
|
88 | void Algorithm::PrintOptionValue(std::string const& key, std::string const& val, Logger::Level const level, std::string_view prefix) const |
| 212 | { | ||
| 213 |
5/10✓ Branch 9 → 10 taken 88 times.
✗ Branch 9 → 21 not taken.
✓ Branch 10 → 11 taken 84 times.
✓ Branch 10 → 13 taken 4 times.
✓ Branch 15 → 16 taken 70 times.
✓ Branch 15 → 18 taken 18 times.
✗ Branch 21 → 22 not taken.
✗ Branch 21 → 24 not taken.
✗ Branch 27 → 28 not taken.
✗ Branch 27 → 30 not taken.
|
176 | m_log->Print(level, "{}: {:>20} = {:?} [string]", prefix, key, val); |
| 214 | 88 | } | |
| 215 | |||
| 216 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 18 times.
|
18 | void Algorithm::PrintOptionValue(std::string const& key, std::vector<int> const& val, Logger::Level const level, std::string_view prefix) const |
| 217 | { | ||
| 218 |
2/6✓ Branch 6 → 7 taken 18 times.
✗ Branch 6 → 13 not taken.
✓ Branch 7 → 8 taken 18 times.
✗ Branch 7 → 10 not taken.
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 16 not taken.
|
18 | m_log->Print(level, "{}: {:>20} = ({}) [std::vector<int>]", prefix, key, fmt::join(val, ", ")); |
| 219 | 18 | } | |
| 220 | |||
| 221 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 28 times.
|
28 | void Algorithm::PrintOptionValue(std::string const& key, std::vector<double> const& val, Logger::Level const level, std::string_view prefix) const |
| 222 | { | ||
| 223 |
3/6✓ Branch 6 → 7 taken 28 times.
✗ Branch 6 → 13 not taken.
✓ Branch 7 → 8 taken 16 times.
✓ Branch 7 → 10 taken 12 times.
✗ Branch 13 → 14 not taken.
✗ Branch 13 → 16 not taken.
|
28 | m_log->Print(level, "{}: {:>20} = ({}) [std::vector<double>]", prefix, key, fmt::join(val, ", ")); |
| 224 | 28 | } | |
| 225 | |||
| 226 | 5 | void Algorithm::PrintOptionValue(std::string const& key, std::vector<std::string> const& val, Logger::Level const level, std::string_view prefix) const | |
| 227 | { | ||
| 228 | std::vector<std::string> val_quoted; | ||
| 229 |
2/2✓ Branch 13 → 3 taken 12 times.
✓ Branch 13 → 14 taken 5 times.
|
17 | for(auto const& s : val) |
| 230 |
1/2✓ Branch 6 → 7 taken 12 times.
✗ Branch 6 → 26 not taken.
|
24 | val_quoted.push_back(fmt::format("{:?}", s)); |
| 231 |
2/6✓ Branch 18 → 19 taken 5 times.
✗ Branch 18 → 32 not taken.
✓ Branch 19 → 20 taken 5 times.
✗ Branch 19 → 22 not taken.
✗ Branch 32 → 33 not taken.
✗ Branch 32 → 35 not taken.
|
5 | m_log->Print(level, "{}: {:>20} = ({}) [std::vector<string>]", prefix, key, fmt::join(val_quoted, ", ")); |
| 232 | 5 | } | |
| 233 | |||
| 234 | /////////////////////////////////////////////////////////////////////////////// | ||
| 235 | |||
| 236 | 124337 | hipo::bank& Algorithm::GetBank(hipo::banklist& banks, hipo::banklist::size_type const idx, std::string const& expected_bank_name) const | |
| 237 | { | ||
| 238 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 5 taken 124337 times.
|
124337 | if(m_rows_only) { |
| 239 | ✗ | m_log->Error("algorithm is in 'rows only' mode; cannot call `Run` since banks are not cached; use action function(s) instead"); | |
| 240 | } | ||
| 241 | else { | ||
| 242 | try { | ||
| 243 |
1/2✓ Branch 5 → 6 taken 124337 times.
✗ Branch 5 → 56 not taken.
|
124337 | auto& result = banks.at(idx); |
| 244 |
4/6✓ Branch 6 → 7 taken 123455 times.
✓ Branch 6 → 19 taken 882 times.
✗ Branch 11 → 12 not taken.
✓ Branch 11 → 13 taken 123455 times.
✗ Branch 19 → 20 not taken.
✓ Branch 19 → 40 taken 124337 times.
|
371247 | if(!expected_bank_name.empty() && result.getSchema().getName() != expected_bank_name) |
| 245 | ✗ | m_log->Error("expected input bank '{}' at index={}; got bank named '{}'", expected_bank_name, idx, result.getSchema().getName()); | |
| 246 | else | ||
| 247 | 124337 | return result; | |
| 248 | } | ||
| 249 | ✗ | catch(std::out_of_range const& o) { | |
| 250 | ✗ | m_log->Error("required input bank '{}' not found; cannot `Run` algorithm '{}'", expected_bank_name, m_class_name); | |
| 251 | ✗ | auto creators = AlgorithmFactory::GetCreatorAlgorithms(expected_bank_name); | |
| 252 | ✗ | if(creators) | |
| 253 | ✗ | m_log->Error(" -> this bank is created by algorithm(s) [{}]; please `Run` ONE of them BEFORE this algorithm", fmt::join(creators.value(), ", ")); | |
| 254 | ✗ | } | |
| 255 | } | ||
| 256 | ✗ | throw std::runtime_error("GetBank failed"); | |
| 257 | } | ||
| 258 | |||
| 259 | /////////////////////////////////////////////////////////////////////////////// | ||
| 260 | |||
| 261 | 23 | std::vector<std::string> Algorithm::GetCreatedBankNames() const noexcept(false) | |
| 262 | { | ||
| 263 | 23 | auto created_banks = AlgorithmFactory::GetCreatedBanks(m_class_name); | |
| 264 |
1/2✓ Branch 3 → 4 taken 23 times.
✗ Branch 3 → 5 not taken.
|
23 | if(created_banks) |
| 265 |
1/2✓ Branch 4 → 8 taken 23 times.
✗ Branch 4 → 14 not taken.
|
46 | return created_banks.value(); |
| 266 | ✗ | throw std::runtime_error("failed to get created bank names"); | |
| 267 | } | ||
| 268 | |||
| 269 | /////////////////////////////////////////////////////////////////////////////// | ||
| 270 | |||
| 271 | 23 | std::string Algorithm::GetCreatedBankName() const noexcept(false) | |
| 272 | { | ||
| 273 | 23 | auto created_banks = GetCreatedBankNames(); | |
| 274 |
1/3✗ Branch 5 → 6 not taken.
✓ Branch 5 → 17 taken 23 times.
✗ Branch 5 → 21 not taken.
|
23 | switch(created_banks.size()) { |
| 275 | ✗ | case 0: | |
| 276 | ✗ | m_log->Error("algorithm {:?} creates no new banks", m_class_name); | |
| 277 | ✗ | break; | |
| 278 | 23 | case 1: | |
| 279 |
1/2✓ Branch 17 → 18 taken 23 times.
✗ Branch 17 → 55 not taken.
|
46 | return created_banks.at(0); |
| 280 | break; | ||
| 281 | ✗ | default: | |
| 282 | ✗ | m_log->Error("algorithm {:?} creates more than one bank; they are: [{}]", m_class_name, fmt::join(created_banks, ", ")); | |
| 283 | ✗ | m_log->Error("- if you called `GetCreatedBank` or `GetCreatedBankSchema`, please specify which bank you want"); | |
| 284 | ✗ | m_log->Error("- if you called `GetCreatedBankName`, call `GetCreatedBankNames` instead"); | |
| 285 | ✗ | break; | |
| 286 | } | ||
| 287 | ✗ | throw std::runtime_error("failed to get created bank names"); | |
| 288 | 23 | } | |
| 289 | |||
| 290 | /////////////////////////////////////////////////////////////////////////////// | ||
| 291 | |||
| 292 | 1 | hipo::bank Algorithm::GetCreatedBank(std::string const& bank_name) const noexcept(false) | |
| 293 | { | ||
| 294 |
1/2✓ Branch 3 → 4 taken 1 time.
✗ Branch 3 → 6 not taken.
|
1 | return hipo::bank(GetCreatedBankSchema(bank_name), 0); |
| 295 | } | ||
| 296 | |||
| 297 | /////////////////////////////////////////////////////////////////////////////// | ||
| 298 | |||
| 299 |
1/2✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 32 times.
|
32 | hipo::schema Algorithm::GetCreatedBankSchema(std::string const& bank_name) const noexcept(false) |
| 300 | { | ||
| 301 | std::string bank_name_arg = bank_name; // copy, to permit modification | ||
| 302 | |||
| 303 | // if the user did not provide a bank name, get it from the list of banks created by the algorithm; | ||
| 304 | // this will fail if the algorithm creates more than one bank, in which case, the user must | ||
| 305 | // specify the bank name explicitly | ||
| 306 |
2/2✓ Branch 5 → 6 taken 1 time.
✓ Branch 5 → 14 taken 31 times.
|
32 | if(bank_name.empty()) |
| 307 |
1/2✓ Branch 6 → 7 taken 1 time.
✗ Branch 6 → 134 not taken.
|
2 | bank_name_arg = GetCreatedBankName(); |
| 308 | |||
| 309 | // loop over bank definitions, `BANK_DEFS`, which is generated at build-time using `src/iguana/bankdefs/iguana.json` | ||
| 310 |
1/2✓ Branch 78 → 15 taken 103 times.
✗ Branch 78 → 79 not taken.
|
103 | for(auto const& bank_def : BANK_DEFS) { |
| 311 |
2/2✓ Branch 15 → 16 taken 32 times.
✓ Branch 15 → 77 taken 71 times.
|
103 | if(bank_def.name == bank_name_arg) { |
| 312 | // make sure the new bank is in REGISTER_IGUANA_ALGORITHM | ||
| 313 |
1/2✗ Branch 20 → 21 not taken.
✓ Branch 20 → 43 taken 32 times.
|
64 | if(!AlgorithmFactory::GetCreatorAlgorithms(bank_name_arg)) { |
| 314 | ✗ | m_log->Error("algorithm {:?} creates bank {:?}, which is not registered; new banks must be included in `REGISTER_IGUANA_ALGORITHM` arguments", m_class_name, bank_name_arg); | |
| 315 | ✗ | throw std::runtime_error("CreateBank failed"); | |
| 316 | } | ||
| 317 | // create the schema format string | ||
| 318 | std::vector<std::string> schema_def; | ||
| 319 |
2/2✓ Branch 61 → 44 taken 293 times.
✓ Branch 61 → 62 taken 32 times.
|
325 | for(auto const& entry : bank_def.entries) |
| 320 |
1/2✓ Branch 44 → 45 taken 293 times.
✗ Branch 44 → 124 not taken.
|
586 | schema_def.push_back(entry.name + "/" + entry.type); |
| 321 | 32 | auto format_string = fmt::format("{}", fmt::join(schema_def, ",")); | |
| 322 | // create the new bank schema | ||
| 323 |
1/2✓ Branch 63 → 64 taken 32 times.
✗ Branch 63 → 118 not taken.
|
32 | hipo::schema bank_schema(bank_name_arg.c_str(), bank_def.group, bank_def.item); |
| 324 |
1/2✓ Branch 64 → 65 taken 32 times.
✗ Branch 64 → 116 not taken.
|
32 | bank_schema.parse(format_string); |
| 325 | 32 | return bank_schema; | |
| 326 | 32 | } | |
| 327 | } | ||
| 328 | |||
| 329 | ✗ | throw std::runtime_error(fmt::format("bank {:?} not found in 'BankDefs.h'; is this bank defined in src/iguana/bankdefs/iguana.json ?", bank_name_arg)); | |
| 330 | } | ||
| 331 | /////////////////////////////////////////////////////////////////////////////// | ||
| 332 | |||
| 333 | 12 | unsigned int Algorithm::GetCreatedBankVariant() const | |
| 334 | { | ||
| 335 | 12 | return m_created_bank_variant; | |
| 336 | } | ||
| 337 | |||
| 338 | /////////////////////////////////////////////////////////////////////////////// | ||
| 339 | |||
| 340 | ✗ | std::unique_ptr<RCDBReader>& Algorithm::GetRCDBReader() | |
| 341 | { | ||
| 342 | ✗ | return m_rcdb; | |
| 343 | } | ||
| 344 | |||
| 345 | /////////////////////////////////////////////////////////////////////////////// | ||
| 346 | |||
| 347 | 31 | hipo::schema Algorithm::CreateBank( | |
| 348 | hipo::banklist& banks, | ||
| 349 | hipo::banklist::size_type& bank_idx, | ||
| 350 | std::string const& bank_name) noexcept(false) | ||
| 351 | { | ||
| 352 | // check if this bank is already present in `banks`, and set `m_created_bank_variant` accordingly | ||
| 353 |
2/2✓ Branch 14 → 3 taken 142 times.
✓ Branch 14 → 15 taken 31 times.
|
173 | for(auto& bank : banks) { |
| 354 |
4/4✓ Branch 6 → 7 taken 90 times.
✓ Branch 6 → 9 taken 52 times.
✓ Branch 11 → 12 taken 1 time.
✓ Branch 11 → 13 taken 141 times.
|
284 | if(bank.getSchema().getName() == bank_name) |
| 355 | 1 | m_created_bank_variant++; | |
| 356 | } | ||
| 357 | // create the schema, and add the new bank to `banks` | ||
| 358 | 31 | auto bank_schema = GetCreatedBankSchema(bank_name); | |
| 359 | 31 | bank_idx = banks.size(); | |
| 360 |
1/2✓ Branch 18 → 19 taken 31 times.
✗ Branch 18 → 20 not taken.
|
31 | banks.emplace_back(bank_schema, 0); |
| 361 | 31 | return bank_schema; | |
| 362 | ✗ | } | |
| 363 | |||
| 364 | /////////////////////////////////////////////////////////////////////////////// | ||
| 365 | |||
| 366 | ✗ | void Algorithm::ShowBanks(hipo::banklist const& banks, std::string_view message, Logger::Level const level) const | |
| 367 | { | ||
| 368 | ✗ | if(m_log->GetLevel() <= level) { | |
| 369 | ✗ | if(!message.empty()) | |
| 370 | ✗ | m_log->Print(level, message); | |
| 371 | ✗ | for(auto& bank : banks) | |
| 372 | ✗ | bank.show(); | |
| 373 | } | ||
| 374 | ✗ | } | |
| 375 | |||
| 376 | /////////////////////////////////////////////////////////////////////////////// | ||
| 377 | |||
| 378 | 73068 | void Algorithm::ShowBank(hipo::bank const& bank, std::string_view message, Logger::Level const level) const | |
| 379 | { | ||
| 380 |
1/2✗ Branch 3 → 4 not taken.
✓ Branch 3 → 7 taken 73068 times.
|
73068 | if(m_log->GetLevel() <= level) { |
| 381 | ✗ | if(!message.empty()) | |
| 382 | ✗ | m_log->Print(level, message); | |
| 383 | ✗ | bank.show(); | |
| 384 | } | ||
| 385 | 73068 | } | |
| 386 | |||
| 387 | /////////////////////////////////////////////////////////////////////////////// | ||
| 388 | |||
| 389 | template <typename OPTION_TYPE> | ||
| 390 | 289 | std::optional<OPTION_TYPE> Algorithm::GetCachedOption(std::string const& key) const | |
| 391 | { | ||
| 392 |
6/12std::optional<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > iguana::Algorithm::GetCachedOption<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 5 times.
std::optional<std::vector<double, std::allocator<double> > > iguana::Algorithm::GetCachedOption<std::vector<double, std::allocator<double> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 28 times.
std::optional<std::vector<int, std::allocator<int> > > iguana::Algorithm::GetCachedOption<std::vector<int, std::allocator<int> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 22 times.
std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > iguana::Algorithm::GetCachedOption<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 182 times.
std::optional<double> iguana::Algorithm::GetCachedOption<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 22 times.
std::optional<int> iguana::Algorithm::GetCachedOption<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 2 → 3 not taken.
✓ Branch 2 → 4 taken 30 times.
|
289 | if(key == "") |
| 393 | ✗ | return {}; | |
| 394 |
8/12std::optional<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > iguana::Algorithm::GetCachedOption<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 12 taken 5 times.
std::optional<std::vector<double, std::allocator<double> > > iguana::Algorithm::GetCachedOption<std::vector<double, std::allocator<double> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 12 taken 28 times.
std::optional<std::vector<int, std::allocator<int> > > iguana::Algorithm::GetCachedOption<std::vector<int, std::allocator<int> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✓ Branch 7 → 8 taken 10 times.
✓ Branch 7 → 12 taken 12 times.
std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > iguana::Algorithm::GetCachedOption<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✓ Branch 7 → 8 taken 13 times.
✓ Branch 7 → 14 taken 169 times.
std::optional<double> iguana::Algorithm::GetCachedOption<double>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 11 taken 22 times.
std::optional<int> iguana::Algorithm::GetCachedOption<int>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const:
✗ Branch 7 → 8 not taken.
✓ Branch 7 → 11 taken 30 times.
|
289 | if(auto it{m_option_cache.find(key)}; it != m_option_cache.end()) { |
| 395 | try { // get the expected type | ||
| 396 | ✗ | return std::get<OPTION_TYPE>(it->second); | |
| 397 | } | ||
| 398 | ✗ | catch(std::bad_variant_access const& ex) { | |
| 399 | ✗ | auto printer = [&key, this](auto const& v) { | |
| 400 | ✗ | m_log->Error("wrong type used in SetOption call for option {:?}; using its default value instead", key); | |
| 401 | ✗ | PrintOptionValue(key, v, Logger::Level::error, " USER"); | |
| 402 | ✗ | if(m_log->GetLevel() > Logger::Level::debug) | |
| 403 | ✗ | m_log->Error("to see the actual option values used (and their types), set the log level to 'debug' or lower"); | |
| 404 | }; | ||
| 405 | ✗ | std::visit(printer, it->second); | |
| 406 | } | ||
| 407 | } | ||
| 408 | 266 | return {}; | |
| 409 | } | ||
| 410 | template std::optional<int> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 411 | template std::optional<double> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 412 | template std::optional<std::string> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 413 | template std::optional<std::vector<int>> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 414 | template std::optional<std::vector<double>> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 415 | template std::optional<std::vector<std::string>> Algorithm::GetCachedOption(std::string const& key) const; | ||
| 416 | |||
| 417 | /////////////////////////////////////////////////////////////////////////////// | ||
| 418 | |||
| 419 | ✗ | void Algorithm::ThrowSinceRenamed(std::string const& new_name, std::string const& version) const noexcept(false) | |
| 420 | { | ||
| 421 | std::string new_path = new_name; | ||
| 422 | std::string::size_type it = 0; | ||
| 423 | ✗ | while((it = new_path.find("::", it)) != std::string::npos) | |
| 424 | ✗ | new_path.replace(it, 2, "/"); | |
| 425 | ✗ | m_log->Error("As of Iguana version {}, the algorithm {:?} has been renamed:", version, m_class_name); | |
| 426 | ✗ | m_log->Error("- the new name is: {:?}", new_name); | |
| 427 | ✗ | m_log->Error("- the new C++ header is: \"iguana/algorithms/{}/Algorithm.h\"", new_path); | |
| 428 | ✗ | m_log->Error("- please update your code (and custom configuration YAML, if you have one)"); | |
| 429 | ✗ | m_log->Error("- sorry for the inconvenience!"); | |
| 430 | ✗ | throw std::runtime_error("algorithm has been renamed"); | |
| 431 | } | ||
| 432 | |||
| 433 | /////////////////////////////////////////////////////////////////////////////// | ||
| 434 | |||
| 435 |
2/2✓ Branch 2 → 3 taken 106 times.
✓ Branch 2 → 9 taken 89 times.
|
195 | void Algorithm::CompleteOptionNodePath(std::string const& key, YAMLReader::node_path_t& node_path) const |
| 436 | { | ||
| 437 |
2/2✓ Branch 2 → 3 taken 106 times.
✓ Branch 2 → 9 taken 89 times.
|
195 | if(node_path.empty()) |
| 438 | 106 | node_path.push_front(key); | |
| 439 | 195 | node_path.push_front(m_class_name); | |
| 440 | 195 | } | |
| 441 | } | ||
| 442 |