/*
* File: YuleSimonDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright May 31, 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;
/**
* Unit tests for YuleSimonDistributionTest.
*
* @author krdixon
*/
public class YuleSimonDistributionTest
extends ClosedFormIntegerDistributionTestHarness
{
/**
* Tests for class YuleSimonDistributionTest.
* @param testName Name of the test.
*/
public YuleSimonDistributionTest(
String testName)
{
super(testName);
}
@Override
public YuleSimonDistribution createInstance()
{
return new YuleSimonDistribution( RANDOM.nextDouble() + 3.0 );
}
@Override
public void testDistributionConstructors()
{
System.out.println( "Constructors" );
YuleSimonDistribution instance = new YuleSimonDistribution();
assertEquals( YuleSimonDistribution.DEFAULT_SHAPE, instance.getShape() );
double shape = RANDOM.nextDouble();
instance = new YuleSimonDistribution( shape );
assertEquals( shape, instance.getShape() );
YuleSimonDistribution i2 = new YuleSimonDistribution( instance );
assertNotSame( instance, i2 );
assertEquals( instance.getShape(), i2.getShape() );
}
@Override
public void testPMFConstructors()
{
System.out.println( "PMF Constructors" );
YuleSimonDistribution.PMF instance = new YuleSimonDistribution.PMF();
assertEquals( YuleSimonDistribution.DEFAULT_SHAPE, instance.getShape() );
double shape = RANDOM.nextDouble();
instance = new YuleSimonDistribution.PMF( shape );
assertEquals( shape, instance.getShape() );
YuleSimonDistribution.PMF i2 = new YuleSimonDistribution.PMF( instance );
assertNotSame( instance, i2 );
assertEquals( instance.getShape(), i2.getShape() );
}
@Override
public void testCDFConstructors()
{
System.out.println( "CDF Constructors" );
YuleSimonDistribution.CDF instance = new YuleSimonDistribution.CDF();
assertEquals( YuleSimonDistribution.DEFAULT_SHAPE, instance.getShape() );
double shape = RANDOM.nextDouble();
instance = new YuleSimonDistribution.CDF( shape );
assertEquals( shape, instance.getShape() );
YuleSimonDistribution.CDF i2 = new YuleSimonDistribution.CDF( instance );
assertNotSame( instance, i2 );
assertEquals( instance.getShape(), i2.getShape() );
}
/**
* Test of getShape method, of class YuleSimonDistribution.
*/
public void testGetShape()
{
System.out.println("getShape");
YuleSimonDistribution instance = this.createInstance();
assertTrue( instance.getShape() > 0.0 );
}
/**
* Test of setShape method, of class YuleSimonDistribution.
*/
public void testSetShape()
{
System.out.println("setShape");
YuleSimonDistribution instance = this.createInstance();
double shape = RANDOM.nextDouble();
instance.setShape(shape);
assertEquals( shape, instance.getShape() );
try
{
instance.setShape(0.0);
fail( "Shape must be > 0.0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public void testKnownGetDomain()
{
System.out.println( "Known getDomain" );
YuleSimonDistribution.CDF instance = this.createInstance().getCDF();
IntegerSpan domain = instance.getDomain();
assertEquals( 1, domain.getMinValue() );
assertEquals( 1.0, instance.evaluate(domain.getMaxValue()), TOLERANCE );
}
@Override
public void testPMFKnownValues()
{
System.out.println( "PMF Known Values" );
YuleSimonDistribution.PMF instance = new YuleSimonDistribution.PMF( 0.25 );
assertEquals( 0.0888888888, instance.evaluate(2), TOLERANCE );
assertEquals( 0.012550, instance.evaluate(10), TOLERANCE );
instance.setShape(4.0);
assertEquals( 0.1333333333, instance.evaluate(2), TOLERANCE );
assertEquals( 3.996003995e-4, instance.evaluate(10), TOLERANCE );
}
@Override
public void testCDFKnownValues()
{
System.out.println( "CDF Known Values" );
YuleSimonDistribution.CDF instance = new YuleSimonDistribution.CDF( 0.25 );
assertEquals( 0.2888888888888, instance.evaluate(2), TOLERANCE );
assertEquals( 0.4980025, instance.evaluate(10), TOLERANCE );
instance.setShape( 4.0 );
assertEquals( 0.9333333333333, instance.evaluate(2), TOLERANCE );
assertEquals( 0.999000999, instance.evaluate(10), TOLERANCE );
}
@Override
public void testKnownConvertToVector()
{
System.out.println( "Known convertToVector" );
YuleSimonDistribution instance = this.createInstance();
Vector p = instance.convertToVector();
assertEquals( 1, p.getDimensionality() );
assertEquals( instance.getShape(), p.getElement(0) );
}
@Override
public void testDistributionGetVariance()
{
int temp = NUM_SAMPLES;
NUM_SAMPLES = 10000;
super.testDistributionGetVariance();
NUM_SAMPLES = temp;
}
}