/*
* File: GeometricDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright May 30, 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.statistics.distribution;
import gov.sandia.cognition.collection.IntegerSpan;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.statistics.ClosedFormIntegerDistributionTestHarness;
import java.util.Random;
/**
* Unit tests for GeometricDistributionTest.
*
* @author krdixon
*/
public class GeometricDistributionTest
extends ClosedFormIntegerDistributionTestHarness
{
/**
* Tests for class GeometricDistributionTest.
* @param testName Name of the test.
*/
public GeometricDistributionTest(
String testName)
{
super(testName);
}
@Override
public GeometricDistribution createInstance()
{
double p = RANDOM.nextDouble();
return new GeometricDistribution( p );
}
@Override
public void testDistributionConstructors()
{
System.out.println( "Constructors" );
GeometricDistribution instance = new GeometricDistribution();
assertEquals( GeometricDistribution.DEFAULT_P, instance.getP() );
double p = RANDOM.nextDouble();
instance = new GeometricDistribution( p );
assertEquals( p, instance.getP() );
GeometricDistribution i2 = new GeometricDistribution(instance);
assertEquals( instance.getP(), i2.getP() );
}
@Override
public void testCDFConstructors()
{
System.out.println( "CDF Constructors" );
GeometricDistribution.CDF instance = new GeometricDistribution.CDF();
assertEquals( GeometricDistribution.DEFAULT_P, instance.getP() );
double p = RANDOM.nextDouble();
instance = new GeometricDistribution.CDF( p );
assertEquals( p, instance.getP() );
GeometricDistribution.CDF i2 = new GeometricDistribution.CDF(instance);
assertEquals( instance.getP(), i2.getP() );
}
@Override
public void testPMFConstructors()
{
System.out.println( "PMF Constructors" );
GeometricDistribution.PMF instance = new GeometricDistribution.PMF();
assertEquals( GeometricDistribution.DEFAULT_P, instance.getP() );
double p = RANDOM.nextDouble();
instance = new GeometricDistribution.PMF( p );
assertEquals( p, instance.getP() );
GeometricDistribution.PMF i2 = new GeometricDistribution.PMF(instance);
assertEquals( instance.getP(), i2.getP() );
}
/**
* Test of getP method, of class GeometricDistribution.
*/
public void testGetP()
{
System.out.println("getP");
GeometricDistribution instance = this.createInstance();
assertTrue( instance.getP() >= 0.0 );
assertTrue( instance.getP() <= 1.0 );
}
/**
* Test of setP method, of class GeometricDistribution.
*/
public void testSetP()
{
System.out.println("setP");
double p = RANDOM.nextDouble();
GeometricDistribution instance = this.createInstance();
instance.setP(p);
assertEquals( p, instance.getP() );
instance.setP(0.0);
instance.setP(1.0);
try
{
instance.setP(-1.0);
fail( "p must be [0,1] " );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
try
{
instance.setP(2.0);
fail( "p must be [0,1] " );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public void testKnownGetDomain()
{
System.out.println( "Known getDomain" );
GeometricDistribution.CDF instance = this.createInstance().getCDF();
IntegerSpan domain = instance.getDomain();
assertEquals( 0, domain.getMinValue() );
assertEquals( 1.0, instance.evaluate( domain.getMaxValue() ), TOLERANCE );
}
@Override
public void testKnownConvertToVector()
{
System.out.println( "Known convertToVector" );
GeometricDistribution instance = this.createInstance();
Vector p = instance.convertToVector();
assertEquals( 1, p.getDimensionality() );
assertEquals( instance.getP(), p.getElement(0) );
}
@Override
public void testPMFKnownValues()
{
System.out.println( "PMF Known Values" );
GeometricDistribution.PMF pmf = new GeometricDistribution.PMF();
pmf.setP(0.03);
assertEquals( 0.0140092412, pmf.evaluate(25), TOLERANCE );
assertEquals( 0.0257620208, pmf.evaluate(5), TOLERANCE );
pmf.setP(0.01);
assertEquals( 0.0090438208, pmf.evaluate(10), TOLERANCE );
}
@Override
public void testCDFKnownValues()
{
System.out.println( "CDF Known Values" );
GeometricDistribution.CDF cdf = new GeometricDistribution.CDF();
cdf.setP(0.03);
assertEquals( 0.5470345359, cdf.evaluate(25), TOLERANCE );
assertEquals( 0.1670279951, cdf.evaluate(5), TOLERANCE );
cdf.setP(0.01);
assertEquals( 0.1046617457, cdf.evaluate(10), TOLERANCE );
}
@Override
public void testDistributionGetVariance()
{
RANDOM = new Random(2);
super.testDistributionGetVariance();
}
}