final double[] xValuesFlip = new double[] {1., 2., 3., 5., 4., 6. };
final double[][] yValuesFlip = new double[][] { {3., 0.1, 0.01, 0.1, 0.01, 3. }, {3., 0.1, 0.01, 2., 0.001, 3. } };
PiecewisePolynomialInterpolator interp = new NaturalSplineInterpolator();
PiecewisePolynomialFunction1D function = new PiecewisePolynomialFunction1D();
PiecewisePolynomialInterpolator interpPos = new NonnegativityPreservingQuinticSplineInterpolator(interp);
PiecewisePolynomialResult resultPos = interpPos.interpolate(xValues, yValues);
PiecewisePolynomialResult resultPosFlip = interpPos.interpolate(xValuesFlip, yValuesFlip);
assertEquals(resultPos.getDimensions(), resultPosFlip.getDimensions());
assertEquals(resultPos.getNumberOfIntervals(), resultPosFlip.getNumberOfIntervals());
assertEquals(resultPos.getOrder(), resultPosFlip.getOrder());
final int nPts = 101;
for (int i = 0; i < 101; ++i) {
final double key = 2. + 3. / (nPts - 1) * i;
assertTrue(function.evaluate(resultPos, key).getData()[0] >= 0.);
assertTrue(function.evaluate(resultPos, key).getData()[1] >= 0.);
}
final int dim = yValues.length;
final int nData = xValues.length;
for (int j = 0; j < dim; ++j) {