/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.statistics.leastsquare; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import org.testng.annotations.Test; import com.opengamma.analytics.math.matrix.DoubleMatrix1D; import com.opengamma.analytics.math.matrix.DoubleMatrix2D; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class LeastSquareResultsTest { private static final DoubleMatrix1D PARAMS = new DoubleMatrix1D(new double[] {1.0, 2.0 }); private static final DoubleMatrix2D COVAR = new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } }); private static final DoubleMatrix2D INV_JAC = new DoubleMatrix2D(new double[][] { {0.5, 0.6 }, {0.7, 0.8 } }); @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq1() { new LeastSquareResults(-1, PARAMS, COVAR); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullParams1() { new LeastSquareResults(1, null, COVAR); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovar1() { new LeastSquareResults(1, PARAMS, null); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullWrongSize1() { new LeastSquareResults(1, new DoubleMatrix1D(new double[] {1.2 }), COVAR); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNotSquare1() { new LeastSquareResults(1, PARAMS, new DoubleMatrix2D(new double[][] {{0.2, 0.3 } })); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeChiSq2() { new LeastSquareResults(-1, PARAMS, COVAR, INV_JAC); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullParams2() { new LeastSquareResults(1, null, COVAR, INV_JAC); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullCovar2() { new LeastSquareResults(1, PARAMS, null, INV_JAC); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullWrongSize2() { new LeastSquareResults(1, new DoubleMatrix1D(new double[] {1.2 }), COVAR, INV_JAC); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNotSquare2() { new LeastSquareResults(1, PARAMS, new DoubleMatrix2D(new double[][] {{0.2, 0.3 } }), INV_JAC); } @Test public void testRecall() { final double chiSq = 12.46; LeastSquareResults res = new LeastSquareResults(chiSq, PARAMS, COVAR); assertEquals(chiSq, res.getChiSq(), 0.0); for (int i = 0; i < 2; i++) { assertEquals(PARAMS.getEntry(i), res.getFitParameters().getEntry(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.getEntry(i, j), res.getCovariance().getEntry(i, j), 0); } } res = new LeastSquareResults(chiSq, PARAMS, COVAR, INV_JAC); assertEquals(chiSq, res.getChiSq(), 0.0); for (int i = 0; i < 2; i++) { assertEquals(PARAMS.getEntry(i), res.getFitParameters().getEntry(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.getEntry(i, j), res.getCovariance().getEntry(i, j), 0); assertEquals(INV_JAC.getEntry(i, j), res.getFittingParameterSensitivityToData().getEntry(i, j), 0); } } } @Test public void testHashCode() { LeastSquareResults ls1 = new LeastSquareResults(1.0, PARAMS, COVAR); LeastSquareResults ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.0, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } })); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.0, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } }), null); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); ls1 = new LeastSquareResults(1.0, PARAMS, COVAR, INV_JAC); ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.0, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } }), new DoubleMatrix2D(new double[][] { {0.5, 0.6 }, {0.7, 0.8 } })); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); } @Test public void testEquals() { LeastSquareResults ls1 = new LeastSquareResults(1.0, PARAMS, COVAR); LeastSquareResults ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.0, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } })); assertEquals(ls1, ls2); ls2 = new LeastSquareResults(1.0, PARAMS, COVAR, null); assertEquals(ls1, ls2); ls2 = new LeastSquareResults(1.1, PARAMS, COVAR); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.1, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } })); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, new DoubleMatrix1D(new double[] {1.0, 2.0 }), new DoubleMatrix2D(new double[][] { {0.1, 0.2 }, {0.2, 0.4 } })); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, PARAMS, COVAR, INV_JAC); assertFalse(ls1.equals(ls2)); ls1 = new LeastSquareResults(1, PARAMS, COVAR, INV_JAC); ls2 = new LeastSquareResults(1, PARAMS, COVAR, COVAR); assertFalse(ls1.equals(ls2)); } }