@@ -510,6 +510,41 @@ TYPED_TEST(ResidualNorm, WaitsTillResidualGoalMultipleRHS)
510510}
511511
512512
513+ TYPED_TEST (ResidualNorm, SimplifiedInterface)
514+ {
515+ using Mtx = typename TestFixture::Mtx;
516+ using NormVector = typename TestFixture::NormVector;
517+ auto initial_res = gko::initialize<Mtx>({100.0 }, this ->exec_ );
518+ auto initial_guess = gko::initialize<Mtx>({1000.0 }, this ->exec_ );
519+ std::shared_ptr<gko::LinOp> rhs = gko::initialize<Mtx>({10.0 }, this ->exec_ );
520+
521+ auto factory_abs = gko::stop::abs_residual_norm (0.5 ).on (this ->exec_ );
522+ auto factory_rel = gko::stop::rel_residual_norm (0.5 ).on (this ->exec_ );
523+ auto factory_red = gko::stop::residual_norm_reduction (0.5 ).on (this ->exec_ );
524+
525+ auto crit_abs =
526+ gko::as<gko::stop::ResidualNorm<TypeParam>>(factory_abs->generate (
527+ nullptr , rhs, initial_guess.get (), initial_res.get ()));
528+ auto crit_rel =
529+ gko::as<gko::stop::ResidualNorm<TypeParam>>(factory_rel->generate (
530+ nullptr , rhs, initial_guess.get (), initial_res.get ()));
531+ auto crit_red =
532+ gko::as<gko::stop::ResidualNorm<TypeParam>>(factory_red->generate (
533+ nullptr , rhs, initial_guess.get (), initial_res.get ()));
534+
535+ ASSERT_EQ (crit_abs->get_parameters ().baseline , gko::stop::mode::absolute);
536+ ASSERT_EQ (crit_rel->get_parameters ().baseline , gko::stop::mode::rhs_norm);
537+ ASSERT_EQ (crit_red->get_parameters ().baseline ,
538+ gko::stop::mode::initial_resnorm);
539+ ASSERT_EQ (crit_abs->get_parameters ().reduction_factor ,
540+ gko::remove_complex<TypeParam>{0.5 });
541+ ASSERT_EQ (crit_rel->get_parameters ().reduction_factor ,
542+ gko::remove_complex<TypeParam>{0.5 });
543+ ASSERT_EQ (crit_red->get_parameters ().reduction_factor ,
544+ gko::remove_complex<TypeParam>{0.5 });
545+ }
546+
547+
513548template <typename T>
514549class ResidualNormWithInitialResnorm : public ::testing::Test {
515550protected:
@@ -964,6 +999,44 @@ TYPED_TEST(ImplicitResidualNorm, WaitsTillResidualGoalMultipleRHS)
964999}
9651000
9661001
1002+ TYPED_TEST (ImplicitResidualNorm, SimplifiedInterface)
1003+ {
1004+ using Mtx = typename TestFixture::Mtx;
1005+ using NormVector = typename TestFixture::NormVector;
1006+ auto initial_res = gko::initialize<Mtx>({100.0 }, this ->exec_ );
1007+ auto initial_guess = gko::initialize<Mtx>({1000.0 }, this ->exec_ );
1008+ std::shared_ptr<gko::LinOp> rhs = gko::initialize<Mtx>({10.0 }, this ->exec_ );
1009+
1010+ auto factory_abs =
1011+ gko::stop::implicit_abs_residual_norm (0.5 ).on (this ->exec_ );
1012+ auto factory_rel =
1013+ gko::stop::implicit_rel_residual_norm (0.5 ).on (this ->exec_ );
1014+ auto factory_red =
1015+ gko::stop::implicit_residual_norm_reduction (0.5 ).on (this ->exec_ );
1016+
1017+ auto crit_abs = gko::as<gko::stop::ImplicitResidualNorm<TypeParam>>(
1018+ factory_abs->generate (nullptr , rhs, initial_guess.get (),
1019+ initial_res.get ()));
1020+ auto crit_rel = gko::as<gko::stop::ImplicitResidualNorm<TypeParam>>(
1021+ factory_rel->generate (nullptr , rhs, initial_guess.get (),
1022+ initial_res.get ()));
1023+ auto crit_red = gko::as<gko::stop::ImplicitResidualNorm<TypeParam>>(
1024+ factory_red->generate (nullptr , rhs, initial_guess.get (),
1025+ initial_res.get ()));
1026+
1027+ ASSERT_EQ (crit_abs->get_parameters ().baseline , gko::stop::mode::absolute);
1028+ ASSERT_EQ (crit_rel->get_parameters ().baseline , gko::stop::mode::rhs_norm);
1029+ ASSERT_EQ (crit_red->get_parameters ().baseline ,
1030+ gko::stop::mode::initial_resnorm);
1031+ ASSERT_EQ (crit_abs->get_parameters ().reduction_factor ,
1032+ gko::remove_complex<TypeParam>{0.5 });
1033+ ASSERT_EQ (crit_rel->get_parameters ().reduction_factor ,
1034+ gko::remove_complex<TypeParam>{0.5 });
1035+ ASSERT_EQ (crit_red->get_parameters ().reduction_factor ,
1036+ gko::remove_complex<TypeParam>{0.5 });
1037+ }
1038+
1039+
9671040template <typename T>
9681041class ResidualNormWithAbsolute : public ::testing::Test {
9691042protected:
0 commit comments