com.opengamma.strata.math.impl.statistics.descriptive.PercentileCalculatorTest.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.strata.math.impl.statistics.descriptive.PercentileCalculatorTest.java

Source

/**
 * 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.descriptive;

import static org.testng.AssertJUnit.assertEquals;

import java.util.Arrays;

import org.apache.commons.math3.random.Well44497b;
import org.testng.annotations.Test;

/**
 * Test.
 */
@Test
public class PercentileCalculatorTest {

    private static final PercentileCalculator CALCULATOR = new PercentileCalculator(0.1);
    private static final Well44497b RANDOM = new Well44497b(0L);
    private static final int N = 100;
    private static final double[] X = new double[N];

    static {
        for (int i = 0; i < N; i++) {
            X[i] = RANDOM.nextDouble();
        }
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testHighPercentile() {
        new PercentileCalculator(1);
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testLowPercentile() {
        new PercentileCalculator(0);
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testSetHighPercentile() {
        CALCULATOR.setPercentile(1);
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testSetLowPercentile() {
        CALCULATOR.setPercentile(0);
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testNullArray() {
        CALCULATOR.apply((double[]) null);
    }

    @Test(expectedExceptions = IllegalArgumentException.class)
    public void testEmptyArray() {
        CALCULATOR.apply(new double[0]);
    }

    @Test
    public void testExtremes() {
        final double[] y = Arrays.copyOf(X, X.length);
        Arrays.sort(y);
        CALCULATOR.setPercentile(1e-15);
        assertEquals(CALCULATOR.apply(X), y[0], 0);
        CALCULATOR.setPercentile(1 - 1e-15);
        assertEquals(CALCULATOR.apply(X), y[N - 1], 0);
    }

    @Test
    public void test() {
        assertResult(X, 10);
        assertResult(X, 99);
        assertResult(X, 50);
    }

    private void assertResult(final double[] x, final int percentile) {
        final double[] copy = Arrays.copyOf(x, N);
        Arrays.sort(copy);
        int count = 0;
        CALCULATOR.setPercentile(((double) percentile) / N);
        final double value = CALCULATOR.apply(x);
        while (copy[count++] < value) {
            //intended
        }
        assertEquals(count - 1, percentile);
    }
}