/*
* File: UnivariateSummaryStatisticsTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Sep 22, 2010, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government.
* Export of this program may require a license from the United States
* Government. See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.math;
import java.util.ArrayList;
import java.util.Collection;
import junit.framework.TestCase;
import java.util.Random;
/**
* Unit tests for UnivariateSummaryStatisticsTest.
*
* @author krdixon
*/
public class UnivariateSummaryStatisticsTest
extends TestCase
{
/**
* Random number generator to use for a fixed random seed.
*/
public final Random RANDOM = new Random( 1 );
/**
* Default tolerance of the regression tests, {@value}.
*/
public final double TOLERANCE = 1e-5;
/**
* Tests for class UnivariateSummaryStatisticsTest.
* @param testName Name of the test.
*/
public UnivariateSummaryStatisticsTest(
String testName)
{
super(testName);
}
/**
* Samples
* @param random
* RNG
* @param numSamples
* num samples
* @return
* samples from Gaussian
*/
public static ArrayList<Double> sample(
Random random,
int numSamples )
{
ArrayList<Double> samples = new ArrayList<Double>( numSamples );
for( int n = 0; n < numSamples; n++ )
{
samples.add( random.nextGaussian() );
}
return samples;
}
/**
* Test of clone method, of class UnivariateSummaryStatistics.
*/
public void testClone()
{
System.out.println("clone");
int numSamples = 1000;
Collection<? extends Number> data = sample(RANDOM, numSamples);
UnivariateSummaryStatistics instance = UnivariateSummaryStatistics.create(data);
UnivariateSummaryStatistics clone = instance.clone();
assertNotSame( instance, clone );
assertEquals( instance.toString(), clone.toString() );
}
/**
* Test of create method, of class UnivariateSummaryStatistics.
*/
public void testCreate()
{
System.out.println("create");
int numSamples = 1000;
Collection<? extends Number> data = sample(RANDOM, numSamples);
UnivariateSummaryStatistics result = UnivariateSummaryStatistics.create(data);
System.out.println( "Result: " + result );
assertEquals( numSamples, result.getNumSamples() );
assertEquals( UnivariateStatisticsUtil.computeMean(data), result.getMean(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeVariance(data), result.getVariance(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeSkewness(data), result.getSkewness(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeKurtosis(data), result.getKurtosis(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeMinimum(data), result.getMin(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeMaximum(data), result.getMax(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computeMedian(data), result.getMedian(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.20), result.getQuintiles()[0], TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.40), result.getQuintiles()[1], TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.60), result.getQuintiles()[2], TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.80), result.getQuintiles()[3], TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.025), result.getConfidenceLower(), TOLERANCE );
assertEquals( UnivariateStatisticsUtil.computePercentile(data,0.975), result.getConfidenceUpper(), TOLERANCE );
}
/**
* Test of toString method, of class UnivariateSummaryStatistics.
*/
public void testToString()
{
System.out.println("toString");
int numSamples = 1000;
Collection<? extends Number> data = sample(RANDOM, numSamples);
UnivariateSummaryStatistics instance = UnivariateSummaryStatistics.create(data);
String result = instance.toString();
System.out.println( "Result: " + result );
assertTrue( result.length() > 0 );
}
}