/*
* File: ExponentialDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Dec 29, 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.distribution;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.statistics.SmoothUnivariateDistributionTestHarness;
/**
* Unit tests for ExponentialDistributionTest.
*
* @author krdixon
*/
public class ExponentialDistributionTest
extends SmoothUnivariateDistributionTestHarness
{
/**
* Tests for class ExponentialDistributionTest.
* @param testName Name of the test.
*/
public ExponentialDistributionTest(
String testName)
{
super(testName);
MONTE_CARLO_FACTOR = 10;
}
/**
* Tests the constructors of class ExponentialDistributionTest.
*/
public void testDistributionConstructors()
{
System.out.println( "Constructors" );
ExponentialDistribution instance = new ExponentialDistribution();
assertEquals( ExponentialDistribution.DEFAULT_RATE, instance.getRate() );
double rate = RANDOM.nextDouble();
instance = new ExponentialDistribution( rate );
assertEquals( rate, instance.getRate() );
ExponentialDistribution d2 = new ExponentialDistribution( instance );
assertNotSame( d2, instance );
assertEquals( instance.getRate(), d2.getRate() );
}
/**
* Tests the constructors of class ExponentialDistributionTest.
*/
public void testPDFConstructors()
{
System.out.println( "PDF Constructors" );
ExponentialDistribution.PDF instance = new ExponentialDistribution.PDF();
assertEquals( ExponentialDistribution.DEFAULT_RATE, instance.getRate() );
double rate = RANDOM.nextDouble();
instance = new ExponentialDistribution.PDF( rate );
assertEquals( rate, instance.getRate() );
ExponentialDistribution.PDF d2 = new ExponentialDistribution.PDF( instance );
assertNotSame( d2, instance );
assertEquals( instance.getRate(), d2.getRate() );
}
/**
* Tests the constructors of class ExponentialDistributionTest.
*/
public void testCDFConstructors()
{
System.out.println( "CDF Constructors" );
ExponentialDistribution.CDF instance = new ExponentialDistribution.CDF();
assertEquals( ExponentialDistribution.DEFAULT_RATE, instance.getRate() );
double rate = RANDOM.nextDouble();
instance = new ExponentialDistribution.CDF( rate );
assertEquals( rate, instance.getRate() );
ExponentialDistribution.CDF d2 = new ExponentialDistribution.CDF( instance );
assertNotSame( d2, instance );
assertEquals( instance.getRate(), d2.getRate() );
}
/**
* Test of getRate method, of class ExponentialDistribution.
*/
public void testGetRate()
{
System.out.println("getRate");
ExponentialDistribution instance = this.createInstance();
assertTrue( instance.getRate() > 0.0 );
}
/**
* Test of setRate method, of class ExponentialDistribution.
*/
public void testSetRate()
{
System.out.println("setRate");
ExponentialDistribution instance = this.createInstance();
double rate = instance.getRate();
rate *= 2.0;
instance.setRate(rate);
assertEquals( rate, instance.getRate() );
try
{
instance.setRate(0.0);
fail( "Rate must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public ExponentialDistribution createInstance()
{
double rate = Math.abs( RANDOM.nextGaussian() ) + RANDOM.nextDouble();
return new ExponentialDistribution( rate );
}
@Override
public void testPDFKnownValues()
{
ExponentialDistribution.PDF pdf = new ExponentialDistribution.PDF( 1.0/4.0 );
assertEquals( 0.071626199, pdf.evaluate(5.0), TOLERANCE );
}
@Override
public void testKnownConvertToVector()
{
double rate = RANDOM.nextDouble();
ExponentialDistribution instance = new ExponentialDistribution( rate );
Vector p = instance.convertToVector();
assertEquals( 1, p.getDimensionality() );
assertEquals( rate, p.getElement(0) );
}
@Override
public void testCDFKnownValues()
{
ExponentialDistribution.CDF cdf = new ExponentialDistribution.CDF( 1.0/4.0 );
assertEquals( 1.0-Math.exp(-5.0/4.0), cdf.evaluate(5.0), TOLERANCE );
}
/**
* Learner
*/
public void testLearner()
{
System.out.println( "Learner" );
ExponentialDistribution.MaximumLikelihoodEstimator learner =
new ExponentialDistribution.MaximumLikelihoodEstimator();
this.distributionEstimatorTest(learner);
}
/**
* Weighted learner
*/
public void testWeightedLearner()
{
System.out.println( "Weighted Learner" );
ExponentialDistribution.WeightedMaximumLikelihoodEstimator learner =
new ExponentialDistribution.WeightedMaximumLikelihoodEstimator();
this.weightedDistributionEstimatorTest(learner);
}
}