/*- * Copyright 2016 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package uk.ac.diamond.scisoft.analysis.dataset.function; import static org.junit.Assert.*; import java.util.Arrays; import org.eclipse.january.asserts.TestUtils; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.DatasetUtils; import org.eclipse.january.dataset.DoubleDataset; import org.eclipse.january.dataset.Maths; import org.junit.BeforeClass; import org.junit.Test; import uk.ac.diamond.scisoft.analysis.dataset.function.Interpolation2D.BicubicInterpolationOutput; @SuppressWarnings("unused") public class Interpolation2DTest { private static Dataset x, y, xy; private static Dataset testX = DatasetFactory.createFromObject(Dataset.FLOAT64, new double[]{1.33, 2.65, 55.05, 90.09}); private static Dataset testY = DatasetFactory.createFromObject(Dataset.FLOAT64, new double[]{-36.789, 43.0652, 0.00006, 18.34}); private static Dataset testXY1D = testFunction1D(testX, testY); private static Dataset testXY2D = testFunction2D(testX, testY); @BeforeClass public static void initTest() { x = DatasetFactory.createRange(0.0, 100.0, 2.0, Dataset.FLOAT64); y = DatasetFactory.createRange(-50.0, 50.0, 1.0, Dataset.FLOAT64); xy = DatasetFactory.zeros(new int[]{x.getSize(), y.getSize()}, Dataset.FLOAT64); for (int i = 0 ; i < x.getSize() ; i++) { for (int j = 0 ; j < y.getSize() ; j++) { double value = testFunction(x.getDouble(i), y.getDouble(j)); xy.set(value, i, j); } } //System.out.println("testXY: " + Arrays.toString((((DoubleDataset)testXY).getData()))); } @Test public void testBicubicInterpolation1D() { Dataset test_results = Interpolation2D.bicubicInterpolation(x, y, xy, testX, testY, BicubicInterpolationOutput.ONED); //System.out.println("test_results: " + Arrays.toString((((DoubleDataset)test_results).getData()))); TestUtils.assertDatasetEquals(testXY1D, test_results, 0.01, 0.0); } @Test public void testPiecewiseBicubicSplineInterpolation1D() { Dataset test_results = Interpolation2D.piecewiseBicubicSplineInterpolation(x, y, xy, testX, testY, BicubicInterpolationOutput.ONED); //System.out.println("test_results: " + Arrays.toString((((DoubleDataset)test_results).getData()))); TestUtils.assertDatasetEquals(testXY1D, test_results, 0.02, 0.0); } @Test public void testBicubicInterpolation2D() { Dataset test_results = Interpolation2D.bicubicInterpolation(x, y, xy, testX, testY, BicubicInterpolationOutput.TWOD); //System.out.println("test_results: " + Arrays.toString((((DoubleDataset)test_results).getData()))); assertArrayEquals(new int[]{testX.getSize(), testY.getSize()}, test_results.getShape()); TestUtils.assertDatasetEquals(testXY2D, test_results, 0.03, 0.0); } @Test public void testPiecewiseBicubicSplineInterpolation2D() { Dataset test_results = Interpolation2D.piecewiseBicubicSplineInterpolation(x, y, xy, testX, testY, BicubicInterpolationOutput.TWOD); //System.out.println("test_results: " + Arrays.toString((((DoubleDataset)test_results).getData()))); assertArrayEquals(new int[]{testX.getSize(), testY.getSize()}, test_results.getShape()); TestUtils.assertDatasetEquals(testXY2D, test_results, 0.02, 0.0); } public static double testFunction(double x, double y) { return x*x + 3*x*y - y*y; } public static Dataset testFunction1D(Dataset datax, Dataset datay) { // x*x + 3*x*y - y*y; return Maths.multiply(datax, datax).iadd(Maths.multiply(datax, datay).imultiply(3.0)).isubtract(Maths.multiply(datay, datay)); } public static Dataset testFunction2D(Dataset datax, Dataset datay) { // x*x + 3*x*y - y*y; Dataset rv = DatasetFactory.zeros(new int[]{datax.getSize(), datay.getSize()}, Dataset.FLOAT64); for (int i = 0 ; i < datax.getSize() ; i++) { for (int j = 0 ; j < datay.getSize() ; j++) { rv.set(testFunction(datax.getDouble(i), datay.getDouble(j)), i, j); } } return rv; } }