/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.surface; import static org.testng.AssertJUnit.assertEquals; import static org.testng.internal.junit.ArrayAsserts.assertArrayEquals; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class NodalSurfaceAdditiveShiftFunctionTest { private static final double[] X = new double[] {0, 0, 0, 1, 1, 1, 2, 2, 2}; private static final double[] Y = new double[] {0, 1, 2, 0, 1, 2, 0, 1, 2}; private static final double[] Z = new double[] {1, 2, 3, 4, 5, 6, 7, 8, 9}; private static final NodalDoublesSurface SURFACE = NodalDoublesSurface.from(X, Y, Z, "A"); private static final NodalSurfaceAdditiveShiftFunction F = new NodalSurfaceAdditiveShiftFunction(); @Test(expectedExceptions = IllegalArgumentException.class) public void testNull1() { F.evaluate(null, 3); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNull2() { F.evaluate(null, 3, "A"); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNull3() { F.evaluate(null, 3, 4, 5); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNull4() { F.evaluate(null, 3, 4, 5, "A"); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNull5() { F.evaluate(null, new double[] {3}, new double[] {4}, new double[] {5}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNull6() { F.evaluate(null, new double[] {3}, new double[] {4}, new double[] {5}, "A"); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongLengthY1() { F.evaluate(SURFACE, new double[] {1}, new double[] {2, 3}, new double[] {4}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongLengthY2() { F.evaluate(SURFACE, new double[] {1}, new double[] {2, 3}, new double[] {4}, "M"); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongLengthZ1() { F.evaluate(SURFACE, new double[] {1}, new double[] {2}, new double[] {3, 4}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongLengthZ2() { F.evaluate(SURFACE, new double[] {1}, new double[] {2}, new double[] {3, 4}, "L"); } @Test(expectedExceptions = IllegalArgumentException.class) public void testSingleShiftNoNodes() { F.evaluate(SURFACE, 1.5, 2.4, 0.5); } @Test(expectedExceptions = IllegalArgumentException.class) public void testMultipleShiftNoX() { F.evaluate(SURFACE, new double[] {1, 1.5}, new double[] {1, 1}, new double[] {0.25, 0.5}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testMultipleShiftNoY() { F.evaluate(SURFACE, new double[] {0, 0}, new double[] {0, 1.2}, new double[] {0.1, 0.1}); } @Test public void testParallelShift() { final double shift = 0.8; NodalDoublesSurface shifted = F.evaluate(SURFACE, shift); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); final int n = Z.length; for (int i = 0; i < n; i++) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift, 0); } assertEquals(shifted.getName(), "PARALLEL_SHIFT_A"); shifted = F.evaluate(SURFACE, shift, "B"); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); for (int i = 0; i < n; i++) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift, 0); } assertEquals(shifted.getName(), "B"); } @Test public void testSingleShift() { final double x = 2; final double y = 1; final double shift = 0.23; NodalDoublesSurface shifted = F.evaluate(SURFACE, x, y, shift); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); final int n = Z.length; for (int i = 0; i < n; i++) { if (i == 7) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift, 0); } else { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i], 0); } } assertEquals(shifted.getName(), "SINGLE_SHIFT_A"); shifted = F.evaluate(SURFACE, x, y, shift, "B"); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); for (int i = 0; i < n; i++) { if (i == 7) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift, 0); } else { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i], 0); } } assertEquals(shifted.getName(), "B"); } @Test public void testMultipleShiftNoShifts() { final double[] xShift = new double[0]; final double[] yShift = new double[0]; final double[] shift = new double[0]; NodalDoublesSurface surface = F.evaluate(SURFACE, xShift, yShift, shift); assertArrayEquals(surface.getXDataAsPrimitive(), X, 0); assertArrayEquals(surface.getYDataAsPrimitive(), Y, 0); assertArrayEquals(surface.getZDataAsPrimitive(), Z, 0); assertEquals(surface.getName(), "MULTIPLE_SHIFT_" + "A"); surface = F.evaluate(SURFACE, xShift, yShift, shift, "A"); assertArrayEquals(surface.getXDataAsPrimitive(), X, 0); assertArrayEquals(surface.getYDataAsPrimitive(), Y, 0); assertArrayEquals(surface.getZDataAsPrimitive(), Z, 0); assertEquals(surface.getName(), "A"); } @Test public void testMultipleShifts() { final double[] x = new double[] {0, 2}; final double[] y = new double[] {0, 1}; final double shift1 = 0.23; final double shift2 = 0.67; NodalDoublesSurface shifted = F.evaluate(SURFACE, x, y, new double[] {shift1, shift2}); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); final int n = Z.length; for (int i = 0; i < n; i++) { if (i == 0) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift1, 0); } else if (i == 7) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift2, 0); } else { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i], 0); } } assertEquals(shifted.getName(), "MULTIPLE_SHIFT_A"); shifted = F.evaluate(SURFACE, x, y, new double[] {shift1, shift2}, "B"); assertArrayEquals(shifted.getXDataAsPrimitive(), X, 0); assertArrayEquals(shifted.getYDataAsPrimitive(), Y, 0); for (int i = 0; i < n; i++) { if (i == 0) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift1, 0); } else if (i == 7) { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i] + shift2, 0); } else { assertEquals(shifted.getZDataAsPrimitive()[i], Z[i], 0); } } assertEquals(shifted.getName(), "B"); } }