/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.var.parametric; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNull; import java.util.Arrays; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.testng.annotations.Test; import com.opengamma.analytics.math.matrix.DoubleMatrix1D; import com.opengamma.analytics.math.matrix.DoubleMatrix2D; import com.opengamma.analytics.math.matrix.Matrix; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class ParametricVaRDataBundleTest { private static final List<String> NAMES = Arrays.asList("A", "B", "C"); private static final DoubleMatrix1D ZERO = new DoubleMatrix1D(new double[] {0, 0, 0}); private static final DoubleMatrix1D R = new DoubleMatrix1D(new double[] {1, 0, 0}); private static final DoubleMatrix1D DELTA = new DoubleMatrix1D(new double[] {1, 2, 3}); private static final DoubleMatrix2D GAMMA = new DoubleMatrix2D(new double[][] {new double[] {1, 0, 0}, new double[] {0, 2, 0}, new double[] {0, 0, 3}}); private static final DoubleMatrix2D COV = new DoubleMatrix2D(new double[][] {new double[] {0.1, 0.2, 0.3}, new double[] {0.2, 0.4, 0.5}, new double[] {0.3, 0.6, 0.5}}); private static final int ORDER = 1; @Test(expectedExceptions = IllegalArgumentException.class) public void testNullSensitivities1() { new ParametricVaRDataBundle(null, COV, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullSensitivities2() { new ParametricVaRDataBundle(NAMES, null, COV, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovariance1() { new ParametricVaRDataBundle(DELTA, null, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovariance2() { new ParametricVaRDataBundle(NAMES, DELTA, null, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeOrder1() { new ParametricVaRDataBundle(DELTA, COV, -ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeOrder2() { new ParametricVaRDataBundle(NAMES, DELTA, COV, -ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongMatrixDimension() { final Matrix<double[]> m = new Matrix<double[]>() { @Override public int getNumberOfElements() { return 0; } @Override public double[] getEntry(final int... indices) { return ArrayUtils.EMPTY_DOUBLE_ARRAY; } }; new ParametricVaRDataBundle(m, COV, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNonSquareCovarianceMatrix() { new ParametricVaRDataBundle(DELTA, new DoubleMatrix2D(new double[][] {new double[] {1, 2, 3}, new double[] {4, 5, 6}}), ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCovarianceMatrixSize1() { new ParametricVaRDataBundle(DELTA, new DoubleMatrix2D(new double[][] {new double[] {1}}), 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCovarianceMatrixSize2() { new ParametricVaRDataBundle(GAMMA, new DoubleMatrix2D(new double[][] {new double[] {1}}), 2); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongNamesSize1() { new ParametricVaRDataBundle(Arrays.asList("A"), DELTA, COV, ORDER); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongReturnSize1() { new ParametricVaRDataBundle(new DoubleMatrix1D(new double[] {1, 2, 3, 4, 5}), DELTA, COV, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongReturnSize2() { new ParametricVaRDataBundle(new DoubleMatrix1D(new double[] {1, 2, 3, 4, 5}), GAMMA, COV, 1); } @Test(expectedExceptions = IllegalArgumentException.class) public void testWrongNamesSize2() { new ParametricVaRDataBundle(Arrays.asList("A"), GAMMA, COV, ORDER); } @Test public void testHashCodeAndEquals() { ParametricVaRDataBundle data = new ParametricVaRDataBundle(NAMES, R, DELTA, COV, ORDER); ParametricVaRDataBundle other = new ParametricVaRDataBundle(NAMES, R, DELTA, COV, ORDER); assertEquals(data, other); assertEquals(data.hashCode(), other.hashCode()); other = new ParametricVaRDataBundle(Arrays.asList("A", "B", "D"), R, DELTA, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, DELTA, DELTA, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, R, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, DELTA, new DoubleMatrix2D(new double[][] {new double[] {0, 0, 0}, new double[] {0, 0, 0}, new double[] {0, 0, 0}}), ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, DELTA, COV, ORDER + 1); assertFalse(data.equals(other)); data = new ParametricVaRDataBundle(NAMES, R, GAMMA, COV, ORDER); other = new ParametricVaRDataBundle(NAMES, R, GAMMA, COV, ORDER); assertEquals(data, other); assertEquals(data.hashCode(), other.hashCode()); other = new ParametricVaRDataBundle(Arrays.asList("A", "B", "D"), R, GAMMA, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, DELTA, GAMMA, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, R, COV, ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, GAMMA, new DoubleMatrix2D(new double[][] {new double[] {0, 0, 0}, new double[] {0, 0, 0}, new double[] {0, 0, 0}}), ORDER); assertFalse(data.equals(other)); other = new ParametricVaRDataBundle(NAMES, R, GAMMA, COV, ORDER + 1); assertFalse(data.equals(other)); } @Test public void testConstructors() { final ParametricVaRDataBundle data = new ParametricVaRDataBundle(null, ZERO, DELTA, COV, ORDER); ParametricVaRDataBundle other = new ParametricVaRDataBundle(DELTA, COV, ORDER); assertEquals(data, other); other = new ParametricVaRDataBundle(ZERO, DELTA, COV, ORDER); assertEquals(data, other); other = new ParametricVaRDataBundle((List<String>) null, DELTA, COV, ORDER); assertEquals(data, other); } @Test public void testGetters() { ParametricVaRDataBundle data = new ParametricVaRDataBundle(NAMES, R, DELTA, COV, ORDER); assertEquals(data.getNames(), NAMES); assertEquals(data.getSensitivities(), DELTA); assertEquals(data.getCovarianceMatrix(), COV); assertEquals(data.getOrder(), ORDER); assertEquals(data.getExpectedReturn(), R); data = new ParametricVaRDataBundle(DELTA, COV, ORDER); assertNull(data.getNames()); assertEquals(data.getSensitivities(), DELTA); assertEquals(data.getCovarianceMatrix(), COV); assertEquals(data.getOrder(), ORDER); assertEquals(data.getExpectedReturn(), ZERO); data = new ParametricVaRDataBundle(R, DELTA, COV, ORDER); assertNull(data.getNames()); assertEquals(data.getSensitivities(), DELTA); assertEquals(data.getCovarianceMatrix(), COV); assertEquals(data.getOrder(), ORDER); assertEquals(data.getExpectedReturn(), R); data = new ParametricVaRDataBundle(NAMES, DELTA, COV, ORDER); assertEquals(data.getNames(), NAMES); assertEquals(data.getSensitivities(), DELTA); assertEquals(data.getCovarianceMatrix(), COV); assertEquals(data.getOrder(), ORDER); assertEquals(data.getExpectedReturn(), ZERO); } }