/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.math.impl.statistics.leastsquare; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import org.testng.annotations.Test; import com.opengamma.strata.collect.array.DoubleArray; import com.opengamma.strata.collect.array.DoubleMatrix; /** * Test. */ @Test public class LeastSquareResultsTest { private static final DoubleArray PARAMS = DoubleArray.of(1.0, 2.0); private static final DoubleMatrix COVAR = DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}}); private static final DoubleMatrix INV_JAC = DoubleMatrix.copyOf(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, DoubleArray.of(1.2), COVAR); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNotSquare1() { new LeastSquareResults(1, PARAMS, DoubleMatrix.copyOf(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, DoubleArray.of(1.2), COVAR, INV_JAC); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNotSquare2() { new LeastSquareResults(1, PARAMS, DoubleMatrix.copyOf(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.get(i), res.getFitParameters().get(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.get(i, j), res.getCovariance().get(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.get(i), res.getFitParameters().get(i), 0); for (int j = 0; j < 2; j++) { assertEquals(COVAR.get(i, j), res.getCovariance().get(i, j), 0); assertEquals(INV_JAC.get(i, j), res.getFittingParameterSensitivityToData().get(i, j), 0); } } } @Test public void testHashCode() { LeastSquareResults ls1 = new LeastSquareResults(1.0, PARAMS, COVAR); LeastSquareResults ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}})); assertEquals(ls1.hashCode(), ls2.hashCode(), 0); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(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, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2}, {0.2, 0.3}}), DoubleMatrix.copyOf(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, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(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, DoubleArray.of(1.1, 2.0), DoubleMatrix.copyOf(new double[][] { {0.1, 0.2 }, {0.2, 0.3 } })); assertFalse(ls1.equals(ls2)); ls2 = new LeastSquareResults(1.0, DoubleArray.of(1.0, 2.0), DoubleMatrix.copyOf(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)); } }