/** * 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 static org.testng.AssertJUnit.assertFalse; import org.testng.annotations.Test; import com.opengamma.strata.math.impl.statistics.descriptive.MeanCalculator; import com.opengamma.strata.math.impl.statistics.descriptive.MedianCalculator; import com.opengamma.strata.math.impl.statistics.descriptive.SampleFisherKurtosisCalculator; import com.opengamma.strata.math.impl.statistics.descriptive.SampleSkewnessCalculator; import com.opengamma.strata.math.impl.statistics.descriptive.SampleVarianceCalculator; /** * Test. */ @Test public class LaplaceDistributionTest extends ProbabilityDistributionTestCase { private static final double MU = 0.7; private static final double B = 0.5; private static final LaplaceDistribution LAPLACE = new LaplaceDistribution(MU, B, ENGINE); private static final double[] DATA; private static final double EPS1 = 0.05; static { final int n = 1000000; DATA = new double[n]; for (int i = 0; i < n; i++) { DATA[i] = LAPLACE.nextRandom(); } } @Test(expectedExceptions = IllegalArgumentException.class) public void testNegativeBDistribution() { new LaplaceDistribution(1, -0.4); } @Test(expectedExceptions = IllegalArgumentException.class) public void testNullEngine() { new LaplaceDistribution(0, 1, null); } @Test(expectedExceptions = IllegalArgumentException.class) public void testInverseCDFWithLow() { LAPLACE.getInverseCDF(-0.45); } @Test(expectedExceptions = IllegalArgumentException.class) public void testInverseCDFWithHigh() { LAPLACE.getInverseCDF(6.7); } @Test public void testObject() { assertEquals(LAPLACE.getB(), B, 0); assertEquals(LAPLACE.getMu(), MU, 0); LaplaceDistribution other = new LaplaceDistribution(MU, B); assertEquals(LAPLACE, other); assertEquals(LAPLACE.hashCode(), other.hashCode()); other = new LaplaceDistribution(MU + 1, B); assertFalse(LAPLACE.equals(other)); other = new LaplaceDistribution(MU, B + 1); assertFalse(LAPLACE.equals(other)); } @Test public void test() { assertCDFWithNull(LAPLACE); assertPDFWithNull(LAPLACE); assertInverseCDFWithNull(LAPLACE); final double mean = new MeanCalculator().apply(DATA); final double median = new MedianCalculator().apply(DATA); final double variance = new SampleVarianceCalculator().apply(DATA); final double skew = new SampleSkewnessCalculator().apply(DATA); final double kurtosis = new SampleFisherKurtosisCalculator().apply(DATA); assertEquals(mean, MU, EPS1); assertEquals(median, MU, EPS1); assertEquals(variance, 2 * B * B, EPS1); assertEquals(skew, 0, EPS1); assertEquals(kurtosis, 3, EPS1); } }