/*
* File: UnivariateRandomVariableTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Feb 4, 2009, 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.statistics;
import gov.sandia.cognition.statistics.distribution.UnivariateGaussian;
import gov.sandia.cognition.statistics.method.ConfidenceInterval;
import gov.sandia.cognition.statistics.method.GaussianConfidence;
import java.util.ArrayList;
import java.util.Random;
/**
* JUnit tests for class UnivariateRandomVariableTest
* @author Kevin R. Dixon
*/
public class UnivariateRandomVariableTest
extends RingTestHarness<RandomVariable<Number>>
{
public Random random = new Random( 1 );
public double TOLERANCE = 1e-5;
public double CONFIDENCE = 0.95;
/**
* Entry point for JUnit tests for class UnivariateRandomVariableTest
* @param testName name of this test
*/
public UnivariateRandomVariableTest(
String testName)
{
super(testName);
}
@Override
protected UnivariateRandomVariable createRandom()
{
double mean = random.nextGaussian();
double variance = random.nextDouble();
return new UnivariateRandomVariable( new UnivariateGaussian(mean,variance), RANDOM );
}
@Override
public void testScaleEquals()
{
System.out.println( "scaleEquals" );
UnivariateRandomVariable r = this.createRandom();
double mean = r.getMean().doubleValue();
double variance = r.getVariance();
double scale = random.nextGaussian();
r.scaleEquals( scale );
ConfidenceInterval interval = r.getSamplingError( CONFIDENCE );
assertTrue( interval.withinInterval( mean*scale ) );
double EPS = interval.getUpperBound() - interval.getCentralValue();
assertEquals( variance*scale*scale, r.getVariance(), EPS );
}
@Override
public void testPlusEquals()
{
System.out.println( "plusEquals" );
UnivariateRandomVariable r1 = this.createRandom();
UnivariateRandomVariable r2 = this.createRandom();
double mean = r1.getMean().doubleValue() + r2.getMean().doubleValue();
double variance = r1.getVariance() + r2.getVariance();
r1.plusEquals( r2 );
ConfidenceInterval interval = r1.getSamplingError( CONFIDENCE );
assertTrue( interval.withinInterval( mean ) );
double EPS = interval.getUpperBound() - interval.getCentralValue();
assertEquals( variance, r1.getVariance(), EPS );
}
@Override
public void testDotTimesEquals()
{
System.out.println( "dotTimesEquals" );
UnivariateRandomVariable r1 = this.createRandom();
UnivariateRandomVariable r2 = this.createRandom();
double mean = r1.getMean().doubleValue() * r2.getMean().doubleValue();
r1.dotTimesEquals( r2 );
ConfidenceInterval interval = r1.getSamplingError( CONFIDENCE );
assertTrue( interval.withinInterval( mean ) );
}
/**
* Test of equals method, of class UnivariateRandomVariable.
*/
public void testEquals_RandomVariable_double()
{
System.out.println( "equals" );
RandomVariable<Number> other = this.createRandom();
double effectiveZero = random.nextDouble();
UnivariateRandomVariable instance = this.createRandom();
assertEquals( instance, instance );
assertEquals( other, other );
assertFalse( instance.equals( other, effectiveZero ) );
}
/**
* Test of sample method, of class UnivariateRandomVariable.
*/
public void testSample()
{
System.out.println( "sample" );
int numSamples = 10000;
UnivariateRandomVariable instance = this.createRandom();
Random random1a = new Random( 1 );
ArrayList<Number> r1a = instance.sample( random1a, numSamples );
Random random1b = new Random( 1 );
ArrayList<Number> r1b = instance.sample( random1b, numSamples );
for( int i = 0; i < numSamples; i++ )
{
assertEquals( r1a.get(i), r1b.get(i) );
}
ArrayList<Double> d1a = new ArrayList<Double>( r1a.size() );
for( Number n1 : r1a )
{
d1a.add( n1.doubleValue() );
}
GaussianConfidence.Statistic stat = GaussianConfidence.evaluateNullHypothesis(
d1a, instance.getMean().doubleValue() );
assertEquals( 1.0, stat.getNullHypothesisProbability(), 0.95 );
}
/**
* Test of getNumSamples method, of class UnivariateRandomVariable.
*/
public void testGetNumSamples()
{
System.out.println( "getNumSamples" );
UnivariateRandomVariable instance = this.createRandom();
assertTrue( instance.getNumSamples() >= 1 );
}
/**
* Test of setNumSamples method, of class UnivariateRandomVariable.
*/
public void testSetNumSamples()
{
System.out.println( "setNumSamples" );
UnivariateRandomVariable instance = this.createRandom();
int n = instance.getNumSamples();
assertTrue( n >= 1 );
int n2 = n + random.nextInt() + 1;
instance.setNumSamples( n2 );
assertEquals( n2, instance.getNumSamples() );
try
{
instance.setNumSamples( 0 );
fail( "Num samples must be >= 1" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
/**
* Test of getRandom method, of class UnivariateRandomVariable.
*/
public void testGetRandom()
{
System.out.println( "getRandom" );
UnivariateRandomVariable instance = this.createRandom();
assertNotNull( instance.getRandom() );
}
/**
* Test of setRandom method, of class UnivariateRandomVariable.
*/
public void testSetRandom()
{
System.out.println( "setRandom" );
UnivariateRandomVariable instance = this.createRandom();
Random r = instance.getRandom();
assertNotNull( r );
instance.setRandom( null );
assertNull( instance.getRandom() );
instance.setRandom( r );
assertSame( r, instance.getRandom() );
}
/**
* Test of getDistribution method, of class UnivariateRandomVariable.
*/
public void testGetDistribution()
{
System.out.println( "getDistribution" );
UnivariateRandomVariable instance = this.createRandom();
assertNotNull( instance.getDistribution() );
}
/**
* Test of setDistribution method, of class UnivariateRandomVariable.
*/
public void testSetDistribution()
{
System.out.println( "setDistribution" );
UnivariateRandomVariable instance = this.createRandom();
UnivariateDistribution<? extends Number> dist = instance.getDistribution();
assertNotNull( dist );
instance.setDistribution( null );
assertNull( instance.getDistribution() );
instance.setDistribution( dist );
assertSame( dist, instance.getDistribution() );
}
/**
* Test of getMean method, of class UnivariateRandomVariable.
*/
public void testGetMean()
{
System.out.println( "getMean" );
UnivariateRandomVariable instance = this.createRandom();
assertEquals( instance.getDistribution().getMean(), instance.getMean() );
}
/**
* Test of getVariance method, of class UnivariateRandomVariable.
*/
public void testGetVariance()
{
System.out.println( "getVariance" );
UnivariateRandomVariable instance = this.createRandom();
assertEquals( instance.getDistribution().getVariance(), instance.getVariance() );
}
}