/**
* 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.distribution;
import static org.testng.AssertJUnit.assertEquals;
import org.testng.annotations.Test;
/**
* Test.
*/
@Test
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);
}
}