/*
* File: LaplaceDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Jul 3, 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 LaplaceDistributionTest.
*
* @author krdixon
*/
public class LaplaceDistributionTest
extends SmoothUnivariateDistributionTestHarness
{
/**
* Test name
* @param testName name
*/
public LaplaceDistributionTest(
String testName)
{
super(testName);
}
/**
* Test of getMean method, of class LaplaceDistribution.
*/
public void testGetMean()
{
System.out.println("getMean");
LaplaceDistribution instance = new LaplaceDistribution.PDF();
assertEquals( LaplaceDistribution.DEFAULT_MEAN, instance.getMean() );
instance = new LaplaceDistribution.CDF();
assertEquals( LaplaceDistribution.DEFAULT_MEAN, instance.getMean() );
double mean = RANDOM.nextGaussian();
double scale = RANDOM.nextDouble();
instance = new LaplaceDistribution.PDF( mean, scale );
assertEquals( mean, instance.getMean() );
}
/**
* Test of setMean method, of class LaplaceDistribution.
*/
public void testSetMean()
{
System.out.println("setMean");
double mean = RANDOM.nextGaussian();
LaplaceDistribution instance =
new LaplaceDistribution.CDF( this.createInstance() );
instance.setMean(mean);
assertEquals( mean, instance.getMean() );
}
/**
* Test of getScale method, of class LaplaceDistribution.
*/
public void testGetScale()
{
System.out.println("getScale");
LaplaceDistribution instance = new LaplaceDistribution.CDF();
assertEquals( LaplaceDistribution.DEFAULT_SCALE, instance.getScale() );
instance = new LaplaceDistribution.PDF();
assertEquals( LaplaceDistribution.DEFAULT_SCALE, instance.getScale() );
double mean = RANDOM.nextGaussian();
double scale = RANDOM.nextDouble();
instance = new LaplaceDistribution.PDF( mean, scale );
assertEquals( scale, instance.getScale() );
}
/**
* Test of setScale method, of class LaplaceDistribution.
*/
public void testSetScale()
{
System.out.println("setScale");
LaplaceDistribution instance = this.createInstance();
double scale = RANDOM.nextDouble() * 10.0;
instance.setScale(scale);
assertEquals( scale, instance.getScale() );
try
{
instance.setScale(0.0);
fail( "scale must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public void testPDFKnownValues()
{
System.out.println( "PDF.knownValues" );
LaplaceDistribution.PDF pdf = new LaplaceDistribution.PDF( 2.0, 4.0 );
assertEquals( 0.035813, pdf.evaluate(-3.0), TOLERANCE );
assertEquals( 0.097350, pdf.evaluate( 3.0), TOLERANCE );
}
@Override
public LaplaceDistribution createInstance()
{
return new LaplaceDistribution(
RANDOM.nextGaussian(), RANDOM.nextDouble()*5.0 );
}
@Override
public void testKnownConvertToVector()
{
System.out.println( "CDF.convertToVector" );
LaplaceDistribution.CDF cdf = this.createInstance().getCDF();
Vector parameters = cdf.convertToVector();
assertEquals( 2, parameters.getDimensionality() );
assertEquals( cdf.getMean(), parameters.getElement(0) );
assertEquals( cdf.getScale(), parameters.getElement(1) );
}
@Override
public void testCDFKnownValues()
{
System.out.println( "CDF.knownValues" );
LaplaceDistribution.CDF cdf = this.createInstance().getCDF();
assertEquals( 0.5, cdf.evaluate(cdf.getMean()), TOLERANCE );
cdf = new LaplaceDistribution.CDF( 2.0, 4.0 );
assertEquals( 0.610600, cdf.evaluate( 3.0), TOLERANCE );
assertEquals( 0.143252, cdf.evaluate(-3.0), TOLERANCE );
}
/**
* Test of toString
*/
public void testToString()
{
System.out.println( "toString" );
LaplaceDistribution laplace = this.createInstance();
String s = laplace.toString();
System.out.println( "Laplace: " + s );
assertNotNull( s );
assertTrue( s.length() > 0 );
}
/**
* Test of learner
*/
public void testLearner()
{
System.out.println( "LaplaceDistribution.Learner" );
LaplaceDistribution.MaximumLikelihoodEstimator learner =
new LaplaceDistribution.MaximumLikelihoodEstimator();
this.distributionEstimatorTest(learner);
}
/**
* Test of learner
*/
public void testWeightedLearner()
{
System.out.println( "LaplaceDistribution.Learner" );
LaplaceDistribution.WeightedMaximumLikelihoodEstimator learner =
new LaplaceDistribution.WeightedMaximumLikelihoodEstimator();
this.weightedDistributionEstimatorTest(learner);
}
@Override
public void testPDFConstructors()
{
System.out.println( "PDF Constructors" );
LaplaceDistribution.PDF d = new LaplaceDistribution.PDF();
assertEquals( LaplaceDistribution.DEFAULT_MEAN, d.getMean() );
assertEquals( LaplaceDistribution.DEFAULT_SCALE, d.getScale() );
double mean = RANDOM.nextGaussian();
double scale = Math.abs( RANDOM.nextGaussian() );
d = new LaplaceDistribution.PDF( mean, scale );
assertEquals( mean, d.getMean() );
assertEquals( scale, d.getScale() );
LaplaceDistribution.PDF d2 = new LaplaceDistribution.PDF( d );
assertEquals( d.getMean(), d2.getMean() );
assertEquals( d.getScale(), d2.getScale() );
}
@Override
public void testDistributionConstructors()
{
System.out.println( "Constructors" );
LaplaceDistribution d = new LaplaceDistribution();
assertEquals( LaplaceDistribution.DEFAULT_MEAN, d.getMean() );
assertEquals( LaplaceDistribution.DEFAULT_SCALE, d.getScale() );
double mean = RANDOM.nextGaussian();
double scale = Math.abs( RANDOM.nextGaussian() );
d = new LaplaceDistribution( mean, scale );
assertEquals( mean, d.getMean() );
assertEquals( scale, d.getScale() );
LaplaceDistribution d2 = new LaplaceDistribution( d );
assertEquals( d.getMean(), d2.getMean() );
assertEquals( d.getScale(), d2.getScale() );
}
@Override
public void testCDFConstructors()
{
System.out.println( "CDF Constructors" );
LaplaceDistribution.CDF d = new LaplaceDistribution.CDF();
assertEquals( LaplaceDistribution.DEFAULT_MEAN, d.getMean() );
assertEquals( LaplaceDistribution.DEFAULT_SCALE, d.getScale() );
double mean = RANDOM.nextGaussian();
double scale = Math.abs( RANDOM.nextGaussian() );
d = new LaplaceDistribution.CDF( mean, scale );
assertEquals( mean, d.getMean() );
assertEquals( scale, d.getScale() );
LaplaceDistribution.CDF d2 = new LaplaceDistribution.CDF( d );
assertEquals( d.getMean(), d2.getMean() );
assertEquals( d.getScale(), d2.getScale() );
}
}