diff --git a/src/test-gradient-method.cc b/src/test-gradient-method.cc index 6b78d325ec37c800adb099bd92de371d10151e8e..44df1af2e39bc915d72dc82635b1d5caaf567958 100644 --- a/src/test-gradient-method.cc +++ b/src/test-gradient-method.cc @@ -253,6 +253,47 @@ void testHorribleFunctionLogarithmic() { assert(std::abs(ret1 - ret3) < 1e-5); } +void testSampleFunction3D() { + int const dim = 3; + typedef Dune::SampleFunctional<dim> Functional; + + Functional::SmallMatrix A; + A[0][0] = 3; + A[0][1] = 1.5; + A[1][0] = 1.5; + A[1][1] = 4; + A[1][2] = 1.5; + A[2][1] = 1.5; + A[2][2] = 5; + Functional::SmallVector b; + b[0] = 1; + b[1] = 2; + b[2] = 3; + + Dune::SampleFunction f; + Functional J(A, b, Dune::MyNonlinearity<dim>(f)); + + Functional::SmallVector start = b; + start *= 17; + + double const ret1 = functionTester(J, start, 9); + + // Something random + start[0] = 279; + start[1] = -96; + start[2] = -15; + + double const ret2 = functionTester(J, start, 15); + assert(std::abs(ret1 - ret2) < 1e-5); + + start[0] = 0; + start[1] = 0; + start[2] = 0; + + double const ret3 = functionTester(J, start, 5); + assert(std::abs(ret1 - ret3) < 1e-5); +} + int main() { try { testSampleFunction(); @@ -264,6 +305,8 @@ int main() { testHorribleFunction(); std::cout << std::endl << std::endl << std::endl; testHorribleFunctionLogarithmic(); + std::cout << std::endl << std::endl << std::endl; + testSampleFunction3D(); return 0; } catch (Dune::Exception &e) {