45 #include "GlobiPack_TestLagrPolyMeritFunc1D.hpp" 46 #include "Teuchos_UnitTestHarness.hpp" 47 #include "Teuchos_Tuple.hpp" 59 using Teuchos::outArg;
65 using GlobiPack::computeValue;
68 template<
class Scalar>
69 inline Scalar sqr(
const Scalar &x) {
return x*x; }
72 double g_tol = Teuchos::ScalarTraits<double>::eps()*100.0;
75 TEUCHOS_STATIC_SETUP()
77 Teuchos::UnitTestRepository::getCLP().setOption(
78 "tol", &g_tol,
"Floating point tolerance" );
97 template<
class Scalar>
98 Scalar phi_quad1(
const Scalar &alpha)
100 return as<Scalar>(0.5)*sqr(alpha-as<Scalar>(2.0)) + as<Scalar>(2.0);
103 template<
class Scalar>
104 Scalar Dphi_quad1(
const Scalar &alpha)
106 return alpha-as<Scalar>(2.0);
109 TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL( TestLagrPolyMeritFunc1D, basic, Scalar )
112 typedef Teuchos::ScalarTraits<Scalar> ST;
114 ECHO(Array<Scalar> alphaPoints = tuple<Scalar>(0.0, 2.0, 4.0));
115 ECHO(Array<Scalar> phiPoints = tuple<Scalar>(4.0, 2.0, 4.0));
116 ECHO(TestLagrPolyMeritFunc1D<Scalar> meritFunc(alphaPoints, phiPoints));
117 TEST_ASSERT(meritFunc.supportsDerivEvals());
119 Array<Scalar> alphaTestPoints = tuple<Scalar>(0.0, 1.0, 2.0, 3.0, 4.0);
120 for (
int test_i = 0; test_i < as<int>(alphaTestPoints.size()); ++test_i) {
121 out <<
"\ntest_i="<<test_i<<
"\n\n";
122 Teuchos::OSTab tab(out);
123 ECHO(
const Scalar alpha = alphaTestPoints[test_i]);
124 out <<
"alpha="<<alpha<<
"\n";
125 ECHO(Scalar phi = as<Scalar>(-1.0));
126 ECHO(Scalar Dphi = as<Scalar>(-1.0));
127 ECHO(meritFunc.eval(alpha, outArg(phi), outArg(Dphi)));
128 TEST_FLOATING_EQUALITY(phi, phi_quad1(alpha), g_tol);
129 TEST_FLOATING_EQUALITY(Dphi, Dphi_quad1(alpha), g_tol);
133 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES( TestLagrPolyMeritFunc1D, basic )
Lagrange Polynomial Merit Function used in testing.