/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.statistics.descriptive;
import static org.testng.AssertJUnit.assertEquals;
import java.util.Arrays;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.opengamma.analytics.math.MathException;
import com.opengamma.analytics.math.function.Function1D;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class AverageCalculatorTest {
private static final double[] DATA = {1., 1., 3., 2.5, 5.7, 3.7, 5.7, 5.7, -4., 9.};
private static final Function1D<double[], Double> MEAN = new MeanCalculator();
private static final Function1D<double[], Double> MEDIAN = new MedianCalculator();
private static final Function1D<double[], Double> MODE = new ModeCalculator();
private static final double EPS = 1e-15;
@Test
public void testNull() {
assertNull(MEAN);
assertNull(MEDIAN);
assertNull(MODE);
}
@Test
public void testEmpty() {
assertEmpty(MEAN);
assertEmpty(MEDIAN);
assertEmpty(MODE);
}
@Test
public void testSingleValue() {
final double value = 3.;
final double[] x = {value};
assertEquals(value, MEAN.evaluate(x), EPS);
assertEquals(value, MEDIAN.evaluate(x), EPS);
assertEquals(value, MODE.evaluate(x), EPS);
}
@Test
public void testMean() {
assertEquals(MEAN.evaluate(DATA), 3.33, EPS);
}
@Test
public void testMedian() {
assertEquals(MEDIAN.evaluate(DATA), 3.35, EPS);
final double[] x = Arrays.copyOf(DATA, DATA.length - 1);
assertEquals(MEDIAN.evaluate(x), 3, EPS);
}
@Test
public void testMode() {
final double[] x = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};
try {
MODE.evaluate(x);
Assert.fail();
} catch (final MathException e) {
// Expected
}
assertEquals(MODE.evaluate(DATA), 5.7, EPS);
}
private void assertNull(final Function1D<double[], Double> calculator) {
try {
calculator.evaluate((double[]) null);
Assert.fail();
} catch (final IllegalArgumentException e) {
// Expected
}
}
private void assertEmpty(final Function1D<double[], Double> calculator) {
final double[] x = new double[0];
try {
calculator.evaluate(x);
Assert.fail();
} catch (final IllegalArgumentException e) {
// Expected
}
}
}