final double[][] yValues = new double[][] { {19., 17., 19., 2., 4., 5., 18. }, {19.0, 15.0, 16.0, 6.0, 12.0, 16.0, 8.0 } };
PiecewisePolynomialInterpolator interp = new CubicSplineInterpolator();
PiecewisePolynomialResult result = interp.interpolate(xValues, yValues);
PiecewisePolynomialFunction1D function = new PiecewisePolynomialFunction1D();
PiecewisePolynomialInterpolator interpPos = new MonotonicityPreservingQuinticSplineInterpolator(interp);
PiecewisePolynomialResult resultPos = interpPos.interpolate(xValues, yValues);
assertEquals(resultPos.getDimensions(), result.getDimensions());
assertEquals(resultPos.getNumberOfIntervals(), result.getNumberOfIntervals());
assertEquals(resultPos.getOrder(), 6);
final int len = 21;
double key0 = 5.;
for (int i = 1; i < len; ++i) {
final double key = 5. + 1. / (len - 1) * i;
assertTrue(function.evaluate(resultPos, key).getData()[0] - function.evaluate(resultPos, key0).getData()[0] >= 0.);
key0 = 5. + 1. / (len - 1) * i;
}
key0 = 5.;
for (int i = 1; i < len; ++i) {
final double key = 5. + 1. / (len - 1) * i;
assertTrue(function.evaluate(resultPos, key).getData()[1] - function.evaluate(resultPos, key0).getData()[1] >= 0.);
key0 = 5. + 1. / (len - 1) * i;
}
// final int nKeys = 61;
// for (int i = 0; i < nKeys; ++i) {