/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.statistics.distribution; import static org.testng.AssertJUnit.assertEquals; import org.testng.annotations.Test; import com.opengamma.util.test.TestGroup; /** * Test. */ @Test(groups = TestGroup.UNIT) public class BivariateNormalDistributionTest { private static final ProbabilityDistribution<double[]> DIST = new BivariateNormalDistribution(); private static final double EPS = 1e-8; @Test(expectedExceptions = IllegalArgumentException.class) public void testNullCDF() { DIST.getCDF(null); } @Test(expectedExceptions = IllegalArgumentException.class) public void testInsufficientLengthCDF() { DIST.getCDF(new double[] {2, 1}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testExcessiveLengthCDF() { DIST.getCDF(new double[] {2, 1, 4, 5}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testHighCorrelation() { DIST.getCDF(new double[] {1., 1., 3.}); } @Test(expectedExceptions = IllegalArgumentException.class) public void testLowCorrelation() { DIST.getCDF(new double[] {1., 1., -3.}); } @Test public void test() { assertEquals(DIST.getCDF(new double[] {Double.POSITIVE_INFINITY, Math.random(), Math.random()}), 1, 0); assertEquals(DIST.getCDF(new double[] {Math.random(), Double.POSITIVE_INFINITY, Math.random()}), 1, 0); assertEquals(DIST.getCDF(new double[] {Double.NEGATIVE_INFINITY, Math.random(), Math.random()}), 0, 0); assertEquals(DIST.getCDF(new double[] {Math.random(), Double.NEGATIVE_INFINITY, Math.random()}), 0, 0); assertEquals(DIST.getCDF(new double[] {0.0, 0.0, 0.0}), 0.25, EPS); assertEquals(DIST.getCDF(new double[] {0.0, 0.0, -0.5}), 1. / 6, EPS); assertEquals(DIST.getCDF(new double[] {0.0, 0.0, 0.5}), 1. / 3, EPS); assertEquals(DIST.getCDF(new double[] {0.0, -0.5, 0.0}), 0.1542687694, EPS); assertEquals(DIST.getCDF(new double[] {0.0, -0.5, -0.5}), 0.0816597607, EPS); assertEquals(DIST.getCDF(new double[] {0.0, -0.5, 0.5}), 0.2268777781, EPS); assertEquals(DIST.getCDF(new double[] {0.0, 0.5, 0.0}), 0.3457312306, EPS); assertEquals(DIST.getCDF(new double[] {0.0, 0.5, -0.5}), 0.2731222219, EPS); assertEquals(DIST.getCDF(new double[] {0.0, 0.5, 0.5}), 0.4183402393, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.0, 0.0}), 0.1542687694, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.0, -0.5}), 0.0816597607, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.0, 0.5}), 0.2268777781, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, -0.5, 0.0}), 0.0951954128, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, -0.5, -0.5}), 0.0362981865, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, -0.5, 0.5}), 0.1633195213, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.5, 0.0}), 0.2133421259, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.5, -0.5}), 0.1452180174, EPS); assertEquals(DIST.getCDF(new double[] {-0.5, 0.5, 0.5}), 0.2722393522, EPS); assertEquals(DIST.getCDF(new double[] {0.5, 0.0, 0.0}), 0.3457312306, EPS); assertEquals(DIST.getCDF(new double[] {0.5, 0.0, -0.5}), 0.2731222219, EPS); assertEquals(DIST.getCDF(new double[] {0.5, 0.0, 0.5}), 0.4183402393, EPS); assertEquals(DIST.getCDF(new double[] {0.5, -0.5, 0.0}), 0.2133421259, EPS); assertEquals(DIST.getCDF(new double[] {0.5, -0.5, -0.5}), 0.1452180174, EPS); assertEquals(DIST.getCDF(new double[] {0.5, -0.5, 0.5}), 0.2722393522, EPS); assertEquals(DIST.getCDF(new double[] {0.5, 0.5, 0.0}), 0.4781203354, EPS); assertEquals(DIST.getCDF(new double[] {0.5, 0.5, -0.5}), 0.4192231090, EPS); assertEquals(DIST.getCDF(new double[] {0.0, -1.0, -1.0}), 0.00000000, EPS); } }