/*
* File: UnivariateGaussianMeanBayesianEstimatorTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Nov 17, 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.bayesian.conjugate;
import gov.sandia.cognition.statistics.distribution.UnivariateGaussian;
import java.util.ArrayList;
/**
* Unit tests for UnivariateGaussianMeanBayesianEstimatorTest.
*
* @author krdixon
*/
public class UnivariateGaussianMeanBayesianEstimatorTest
extends ConjugatePriorBayesianEstimatorTestHarness<Double,Double,UnivariateGaussian>
{
/**
* Tests for class UnivariateGaussianMeanBayesianEstimatorTest.
* @param testName Name of the test.
*/
public UnivariateGaussianMeanBayesianEstimatorTest(
String testName)
{
super(testName);
}
/**
* Tests the constructors of class UnivariateGaussianMeanBayesianEstimatorTest.
*/
public void testConstructors()
{
System.out.println( "Constructors" );
UnivariateGaussianMeanBayesianEstimator instance =
new UnivariateGaussianMeanBayesianEstimator();
assertEquals( UnivariateGaussianMeanBayesianEstimator.DEFAULT_KNOWN_VARIANCE, instance.getKnownVariance() );
assertEquals( 0.0, instance.getInitialBelief().getMean() );
assertEquals( 1.0, instance.getInitialBelief().getVariance() );
double v = RANDOM.nextDouble();
instance = new UnivariateGaussianMeanBayesianEstimator( v );
assertEquals( v, instance.getKnownVariance() );
assertEquals( 0.0, instance.getInitialBelief().getMean() );
assertEquals( 1.0, instance.getInitialBelief().getVariance() );
UnivariateGaussian u =
new UnivariateGaussian( RANDOM.nextGaussian(), RANDOM.nextDouble() );
instance = new UnivariateGaussianMeanBayesianEstimator( v, u );
assertEquals( v, instance.getKnownVariance() );
assertSame( u, instance.getInitialBelief() );
}
/**
* Test of getKnownVariance method, of class UnivariateGaussianMeanBayesianEstimator.
*/
public void testGetKnownVariance()
{
System.out.println("getKnownVariance");
double variance = RANDOM.nextDouble();
UnivariateGaussianMeanBayesianEstimator instance =
new UnivariateGaussianMeanBayesianEstimator( variance );
assertEquals( variance, instance.getKnownVariance() );
}
/**
* Test of setKnownVariance method, of class UnivariateGaussianMeanBayesianEstimator.
*/
public void testSetKnownVariance()
{
System.out.println("setKnownVariance");
double knownVariance = RANDOM.nextDouble();
UnivariateGaussianMeanBayesianEstimator instance =
new UnivariateGaussianMeanBayesianEstimator( knownVariance );
assertEquals( knownVariance, instance.getKnownVariance() );
double v2 = knownVariance + 1.0;
instance.setKnownVariance(v2);
assertEquals( v2, instance.getKnownVariance() );
try
{
instance.setKnownVariance(0.0);
fail( "Known variance must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public UnivariateGaussianMeanBayesianEstimator createInstance()
{
return new UnivariateGaussianMeanBayesianEstimator();
}
@Override
public UnivariateGaussian createConditionalDistribution()
{
return new UnivariateGaussian( RANDOM.nextGaussian(), RANDOM.nextDouble() );
}
@Override
public void testKnownValues()
{
System.out.println( "Known values" );
UnivariateGaussianMeanBayesianEstimator instance =
new UnivariateGaussianMeanBayesianEstimator(
4.0, new UnivariateGaussian( 30, 16 ) );
ArrayList<Double> data = new ArrayList<Double>( 12 );
for( int i = 0; i < 12; i++ )
{
data.add( 32.0 );
}
UnivariateGaussian result = instance.learn(data);
assertEquals( 0.3265306, result.getVariance(), TOLERANCE );
assertEquals( 31.959184, result.getMean(), TOLERANCE );
}
}