diff --git a/Tests/MathLib/TestPiecewiseLinearInterpolation.cpp b/Tests/MathLib/TestPiecewiseLinearInterpolation.cpp index 149d7338fbd7837d01db101c947acfba004e7b09..ce7e525a1c267f40442fd841621c2be4666035fd 100644 --- a/Tests/MathLib/TestPiecewiseLinearInterpolation.cpp +++ b/Tests/MathLib/TestPiecewiseLinearInterpolation.cpp @@ -50,9 +50,9 @@ TEST(MathLibInterpolationAlgorithms, PiecewiseLinearInterpolation) } // Extrapolation - ASSERT_NEAR(-0.5, interpolation.getValue(-0.5), std::numeric_limits<double>::epsilon()); + ASSERT_NEAR(0.0, interpolation.getValue(-0.5), std::numeric_limits<double>::epsilon()); // Extrapolation - ASSERT_NEAR(1.5, interpolation.getValue(size-0.5), std::numeric_limits<double>::epsilon()); + ASSERT_NEAR(1.0, interpolation.getValue(size-0.5), std::numeric_limits<double>::epsilon()); } TEST(MathLibInterpolationAlgorithms, PiecewiseLinearInterpolationSupportPntsInReverseOrder) @@ -86,7 +86,30 @@ TEST(MathLibInterpolationAlgorithms, PiecewiseLinearInterpolationSupportPntsInRe } // Extrapolation - ASSERT_NEAR(-0.5, interpolation.getValue(-0.5), std::numeric_limits<double>::epsilon()); + ASSERT_NEAR(0.0, interpolation.getValue(-0.5), std::numeric_limits<double>::epsilon()); // Extrapolation - ASSERT_NEAR(1.5, interpolation.getValue(size-0.5), std::numeric_limits<double>::epsilon()); + ASSERT_NEAR(1.0, interpolation.getValue(size-0.5), std::numeric_limits<double>::epsilon()); +} + +TEST(MathLibInterpolationAlgorithms, PiecewiseLinearInterpolationDerivative) +{ + const std::size_t size(1000); + std::vector<double> supp_pnts, values; + for (std::size_t k(0); k<size; ++k) { + supp_pnts.push_back(static_cast<double>(k)); + values.push_back(k*k); + } + + MathLib::PiecewiseLinearInterpolation interpolation{ std::move(supp_pnts), + std::move(values) }; + // Interpolation + for (std::size_t k(0); k<size - 1; ++k) { + + ASSERT_NEAR(1 + 2 * k, interpolation.GetCurveDerivative(k + 0.5), std::numeric_limits<double>::epsilon()); + } + + // Extrapolation + ASSERT_NEAR(1, interpolation.GetCurveDerivative(-1), std::numeric_limits<double>::epsilon()); + // Extrapolation + ASSERT_NEAR(1997, interpolation.GetCurveDerivative(1001), std::numeric_limits<double>::epsilon()); }