Skip to content

Commit

Permalink
[config] adds test for minimal stopping criteria config
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcelKoch committed May 17, 2024
1 parent 8356117 commit 0126f7d
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions core/test/config/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <ginkgo/core/stop/combined.hpp>
#include <ginkgo/core/stop/iteration.hpp>
#include <ginkgo/core/stop/residual_norm.hpp>
#include <ginkgo/core/stop/time.hpp>


#include "core/config/config_helper.hpp"
Expand Down Expand Up @@ -130,6 +131,60 @@ TEST_F(Config, GenerateObjectWithCustomBuild)
}


TEST_F(Config, GenerateCriteriaFromMinimalConfig)
{
auto reg = registry();
reg.emplace("precond", this->mtx);
pnode minimal_stop{{
{"iteration", pnode{10}},
{"relative_implicit_residual_norm", pnode{0.01}},
{"relative_residual_norm", pnode{0.01}},
{"time", pnode{100}},
}};

pnode p{{{"criteria", minimal_stop}}};
auto obj = std::dynamic_pointer_cast<gko::solver::Cg<float>::Factory>(
parse<LinOpFactoryType::Cg>(p, reg, type_descriptor{"float32", "void"})
.on(this->exec));

ASSERT_NE(obj, nullptr);
auto criteria = obj->get_parameters().criteria;
ASSERT_EQ(criteria.size(), minimal_stop.get_map().size());
{
SCOPED_TRACE("Iteration Criterion");
auto it =
std::dynamic_pointer_cast<const gko::stop::Iteration::Factory>(
criteria[0]);
ASSERT_NE(it, nullptr);
EXPECT_EQ(it->get_parameters().max_iters, 10);
}
{
SCOPED_TRACE("Implicit Residual Criterion");
auto res = std::dynamic_pointer_cast<
const gko::stop::ImplicitResidualNorm<float>::Factory>(criteria[1]);
ASSERT_NE(res, nullptr);
EXPECT_EQ(res->get_parameters().baseline, gko::stop::mode::rhs_norm);
EXPECT_EQ(res->get_parameters().reduction_factor, 0.01f);
}
{
SCOPED_TRACE("Residual Criterion");
auto res = std::dynamic_pointer_cast<
const gko::stop::ResidualNorm<float>::Factory>(criteria[2]);
ASSERT_NE(res, nullptr);
EXPECT_EQ(res->get_parameters().baseline, gko::stop::mode::rhs_norm);
EXPECT_EQ(res->get_parameters().reduction_factor, 0.01f);
}
{
SCOPED_TRACE("Time Criterion");
using namespace std::chrono_literals;
auto time = std::dynamic_pointer_cast<const gko::stop::Time::Factory>(
criteria[3]);
ASSERT_NE(time, nullptr);
EXPECT_EQ(time->get_parameters().time_limit, 100ns);
}
}


TEST(GetValue, IndexType)
{
long long int value = 123;
Expand Down

0 comments on commit 0126f7d

Please sign in to comment.