4#include <iguana/algorithms/Algorithm.h>
6inline int TestConfig(
int test_num,
bool verbose)
9 fmt::print(stderr,
"ERROR: need a test number\n");
14 bad_config.AddDirectory(
"non_existent_directory");
16 bad_config.AddFile(
"non_existent_file.yaml");
18 catch(std::exception
const& ex) {
19 fmt::print(
"excpected exception thrown when trying to add non-existent file\n");
21 bad_config.PrintDirectories();
25 algo->SetOption(
"log", verbose ?
"debug" :
"info");
26 algo->SetConfigDirectory(
"src/iguana/tests");
27 algo->SetConfigFile(fmt::format(
"test_{}.yaml", test_num));
34 assert((algo->GetOptionScalar<
int>(
"scalar_int") == 1));
35 assert((algo->GetOptionScalar<
double>(
"scalar_double") == 2.5));
36 assert((algo->GetOptionScalar<std::string>(
"scalar_string") ==
"lizard"));
38 assert((algo->GetOptionVector<
int>(
"vector_int") == std::vector<int>{1, 2, 3}));
39 assert((algo->GetOptionVector<
double>(
"vector_double") == std::vector<double>{1.5, 2.5}));
40 assert((algo->GetOptionVector<std::string>(
"vector_string") == std::vector<std::string>{
"spider",
"bat",
"chameleon",
"spider"}));
42 auto s = algo->GetOptionSet<std::string>(
"vector_string");
43 assert((s.size() == 3));
44 assert((s.find(
"spider") != s.end()));
45 assert((s.find(
"bee") == s.end()));
48 algo->GetOptionScalar<
int>(
"scalar_empty");
49 fmt::print(stderr,
"ERROR: accessing 'scalar_empty' did not throw exception\n");
52 catch(std::exception
const& ex) {
53 fmt::print(
"SUCCESS: accessing 'scalar_empty' threw an expected exception\n");
56 algo->GetOptionVector<
int>(
"vector_empty");
57 fmt::print(stderr,
"ERROR: accessing 'vector_empty' did not throw exception\n");
60 catch(std::exception
const& ex) {
61 fmt::print(
"SUCCESS: accessing 'vector_empty' threw an expected exception\n");
64 algo->GetOptionSet<
int>(
"vector_empty");
65 fmt::print(stderr,
"ERROR: accessing 'vector_empty' as a `set` did not throw exception\n");
68 catch(std::exception
const& ex) {
69 fmt::print(
"SUCCESS: accessing 'vector_empty' as a `set` threw an expected exception\n");
73 algo->GetOptionScalar<
int>(
"non_existent_scalar");
74 fmt::print(stderr,
"ERROR: accessing 'non_existent_scalar' did not throw exception\n");
77 catch(std::exception
const& ex) {
78 fmt::print(
"SUCCESS: accessing 'non_existent_scalar' threw an expected exception\n");
81 algo->GetOptionVector<
int>(
"non_existent_vector");
82 fmt::print(stderr,
"ERROR: accessing 'non_existent_vector' did not throw exception\n");
85 catch(std::exception
const& ex) {
86 fmt::print(
"SUCCESS: accessing 'non_existent_vector' threw an expected exception\n");
89 algo->GetOptionSet<
int>(
"non_existent_vector");
90 fmt::print(stderr,
"ERROR: accessing 'non_existent_vector' as a `set` did not throw exception\n");
93 catch(std::exception
const& ex) {
94 fmt::print(
"SUCCESS: accessing 'non_existent_vector' as a `set` threw an expected exception\n");
100 assert((algo->GetOptionScalar<
double>(
"t1s1", {
"tree1",
"scalar1"}) == 1.5));
101 assert((algo->GetOptionScalar<
double>(
"t1s2", {
"tree1",
"scalar2"}) == 2.5));
102 assert((algo->GetOptionScalar<
double>(
"t2t1s1", {
"tree2",
"tree1",
"scalar1"}) == 3.5));
103 assert((algo->GetOptionVector<std::string>(
"t2t2t3v1", {
"tree2",
"tree2",
"tree3",
"vector1"}) == std::vector<std::string>{
"gecko",
"snake"}));
104 assert((algo->GetOptionVector<
int>(
"t2v2", {
"tree2",
"vector2"}) == std::vector<int>{3, -4, 5}));
105 assert((algo->GetOptionVector<std::string>(
"vector1", {
"vector1"}) == std::vector<std::string>{
"bee"}));
106 assert((algo->GetOptionVector<std::string>(
"vector1") == std::vector<std::string>{
"bee"}));
112 assert((algo->GetOptionScalar<
int>(
"t1a", {
"tree1", algo->GetConfig()->InRange(
"test_range", 1),
"val"}) == 3));
113 assert((algo->GetOptionScalar<
int>(
"t1b", {
"tree1", algo->GetConfig()->InRange(
"test_range", 3),
"val"}) == 3));
114 assert((algo->GetOptionScalar<
int>(
"t1c", {
"tree1", algo->GetConfig()->InRange(
"test_range", 5),
"val"}) == 3));
115 assert((algo->GetOptionScalar<
int>(
"t1d", {
"tree1", algo->GetConfig()->InRange(
"test_range", 6),
"val"}) == 4));
116 assert((algo->GetOptionScalar<
int>(
"t1e", {
"tree1", algo->GetConfig()->InRange(
"test_range", 10),
"val"}) == 4));
117 assert((algo->GetOptionScalar<
int>(
"t1f", {
"tree1", algo->GetConfig()->InRange(
"test_range", 11),
"val"}) == 0));
118 assert((algo->GetOptionScalar<
int>(
"t1g", {
"tree1", algo->GetConfig()->InRange(
"test_range", 10.1),
"val"}) == 0));
119 assert((algo->GetOptionScalar<
int>(
"t1h", {
"tree1", algo->GetConfig()->InRange(
"test_range", 3.7),
"val"}) == 3));
121 assert((algo->GetOptionScalar<std::string>(
"t2a", {
"tree2", algo->GetConfig()->InRange(
"test_range", 1.9),
"subtree",
"lizard"}) ==
"iguana"));
122 assert((algo->GetOptionScalar<
int>(
"t2b", {
"tree2", algo->GetConfig()->InRange(
"test_range", 1.9),
"subtree",
"number"}) == 7));
123 assert((algo->GetOptionScalar<
int>(
"t2c", {
"tree2", algo->GetConfig()->InRange(
"test_range", 3.0),
"subtree", algo->GetConfig()->InRange(
"sub_range", 1),
"val"}) == 7));
124 assert((algo->GetOptionScalar<
int>(
"t2d", {
"tree2", algo->GetConfig()->InRange(
"test_range", 3.0),
"subtree", algo->GetConfig()->InRange(
"sub_range", 8),
"val"}) == 8));
125 assert((algo->GetOptionScalar<
int>(
"t2e", {
"tree2", algo->GetConfig()->InRange(
"test_range", 3.5),
"subtree", algo->GetConfig()->InRange(
"sub_range", 11),
"val"}) == 1));
126 assert((algo->GetOptionScalar<
int>(
"t2f", {
"tree2", algo->GetConfig()->InRange(
"test_range", 4.0),
"subtree"}) == 10));
128 assert((algo->GetOptionScalar<
int>(
"t3a", {
"tree3", algo->GetConfig()->InRange(
"test_range", 3),
"val"}) == 3));
130 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");
134 catch(std::exception
const& ex) {
135 fmt::print(
"SUCCESS: accessing a missing default value for `InRange` threw expected exception\n");
141 fmt::print(stderr,
"ERROR: unknown test number '{}'", test_num);
static algo_t Create(std::string const &name) noexcept(false)
Configuration file manager.