/*
* File: BetaBinomialDistributionTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Apr 11, 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.math.matrix.Vector;
import gov.sandia.cognition.statistics.ClosedFormIntegerDistributionTestHarness;
import java.util.Collection;
/**
* Unit tests for BetaBinomialDistributionTest.
*
* @author krdixon
*/
public class BetaBinomialDistributionTest
extends ClosedFormIntegerDistributionTestHarness
{
/**
* Tests for class BetaBinomialDistributionTest.
* @param testName Name of the test.
*/
public BetaBinomialDistributionTest(
String testName)
{
super(testName);
}
@Override
public void testDistributionConstructors()
{
System.out.println( "Distribution constructors" );
BetaBinomialDistribution instance = new BetaBinomialDistribution();
assertEquals( BetaBinomialDistribution.DEFAULT_N, instance.getN() );
assertEquals( BetaBinomialDistribution.DEFAULT_SHAPE, instance.getShape() );
assertEquals( BetaBinomialDistribution.DEFAULT_SCALE, instance.getScale() );
int n = RANDOM.nextInt(10) + 10;
double shape = RANDOM.nextDouble() * 10.0;
double scale = RANDOM.nextDouble() * 10.0;
instance = new BetaBinomialDistribution(n, shape, scale);
assertEquals( n, instance.getN() );
assertEquals( shape, instance.getShape() );
assertEquals( scale, instance.getScale() );
BetaBinomialDistribution i2 = new BetaBinomialDistribution(instance);
assertNotSame( instance, i2 );
assertEquals( instance.getN(), i2.getN() );
assertEquals( instance.getShape(), i2.getShape() );
assertEquals( instance.getScale(), i2.getScale() );
}
@Override
public void testPMFConstructors()
{
System.out.println( "PMF.constructors" );
BetaBinomialDistribution.PMF instance = new BetaBinomialDistribution.PMF();
assertEquals( BetaBinomialDistribution.DEFAULT_N, instance.getN() );
assertEquals( BetaBinomialDistribution.DEFAULT_SHAPE, instance.getShape() );
assertEquals( BetaBinomialDistribution.DEFAULT_SCALE, instance.getScale() );
int n = RANDOM.nextInt(10) + 10;
double shape = RANDOM.nextDouble() * 10.0;
double scale = RANDOM.nextDouble() * 10.0;
instance = new BetaBinomialDistribution.PMF(n, shape, scale);
assertEquals( n, instance.getN() );
assertEquals( shape, instance.getShape() );
assertEquals( scale, instance.getScale() );
BetaBinomialDistribution.PMF i2 = new BetaBinomialDistribution.PMF(instance);
assertNotSame( instance, i2 );
assertEquals( instance.getN(), i2.getN() );
assertEquals( instance.getShape(), i2.getShape() );
assertEquals( instance.getScale(), i2.getScale() );
}
@Override
public void testCDFConstructors()
{
System.out.println( "CDF.constructors" );
BetaBinomialDistribution.CDF instance = new BetaBinomialDistribution.CDF();
assertEquals( BetaBinomialDistribution.DEFAULT_N, instance.getN() );
assertEquals( BetaBinomialDistribution.DEFAULT_SHAPE, instance.getShape() );
assertEquals( BetaBinomialDistribution.DEFAULT_SCALE, instance.getScale() );
int n = RANDOM.nextInt(10) + 10;
double shape = RANDOM.nextDouble() * 10.0;
double scale = RANDOM.nextDouble() * 10.0;
instance = new BetaBinomialDistribution.CDF(n, shape, scale);
assertEquals( n, instance.getN() );
assertEquals( shape, instance.getShape() );
assertEquals( scale, instance.getScale() );
BetaBinomialDistribution.CDF i2 = new BetaBinomialDistribution.CDF(instance);
assertNotSame( instance, i2 );
assertEquals( instance.getN(), i2.getN() );
assertEquals( instance.getShape(), i2.getShape() );
assertEquals( instance.getScale(), i2.getScale() );
}
/**
* Test of getShape method, of class BetaBinomialDistribution.
*/
public void testGetShape()
{
System.out.println("getShape");
BetaBinomialDistribution instance = this.createInstance();
assertTrue( instance.getShape() > 0.0 );
}
/**
* Test of setShape method, of class BetaBinomialDistribution.
*/
public void testSetShape()
{
System.out.println("setShape");
BetaBinomialDistribution instance = this.createInstance();
double shape = instance.getShape();
assertTrue( shape > 0.0 );
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 );
}
}
/**
* Test of getScale method, of class BetaBinomialDistribution.
*/
public void testGetScale()
{
System.out.println("getScale");
BetaBinomialDistribution instance = this.createInstance();
assertTrue( instance.getScale() > 0.0 );
}
/**
* Test of setScale method, of class BetaBinomialDistribution.
*/
public void testSetScale()
{
System.out.println("setScale");
BetaBinomialDistribution instance = this.createInstance();
double scale = RANDOM.nextDouble();
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 );
}
}
/**
* Test of getN method, of class BetaBinomialDistribution.
*/
public void testGetN()
{
System.out.println("getN");
BetaBinomialDistribution instance = this.createInstance();
assertTrue( instance.getN() > 0 );
}
/**
* Test of setN method, of class BetaBinomialDistribution.
*/
public void testSetN()
{
System.out.println("setN");
BetaBinomialDistribution instance = this.createInstance();
int n = RANDOM.nextInt(11);
instance.setN(n);
assertEquals( n, instance.getN() );
try
{
instance.setN(0);
fail( "n must be > 0" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
@Override
public BetaBinomialDistribution createInstance()
{
return new BetaBinomialDistribution( 10, 5.0, 8.0 );
}
@Override
public void testKnownGetDomain()
{
System.out.println( "Known getDomain" );
BetaBinomialDistribution instance = this.createInstance();
Collection<? extends Number> domain = instance.getDomain();
double n = 0;
assertEquals( instance.n+1, domain.size() );
for( Number x : domain )
{
assertEquals( n, x.doubleValue() );
n++;
}
}
@Override
public void testPMFKnownValues()
{
System.out.println( "PMF Known values" );
// http://www.vosesoftware.com/ModelRiskHelp/index.htm#Distributions/Discrete_distributions/Beta-Binomial_distribution.htm
BetaBinomialDistribution.PMF instance =
new BetaBinomialDistribution.PMF( 30, 10, 7 );
assertEquals( 0.08775265, instance.evaluate(18), TOLERANCE );
assertEquals( 0.014954774, instance.evaluate(26), TOLERANCE );
assertEquals( 0.021450649, instance.evaluate(10), TOLERANCE );
assertEquals( 0.061496092, instance.evaluate(14), TOLERANCE );
}
@Override
public void testCDFKnownValues()
{
System.out.println( "CDF Known vaules" );
}
@Override
public void testKnownConvertToVector()
{
System.out.println( "Known convertToVector" );
BetaBinomialDistribution instance = this.createInstance();
Vector p = instance.convertToVector();
assertEquals( 3, p.getDimensionality() );
assertEquals( instance.getN(), (int) p.getElement(0) );
assertEquals( instance.getShape(), p.getElement(1) );
assertEquals( instance.getScale(), p.getElement(2) );
}
@Override
public void testCDFBoundaryConditions()
{
// super.testCDFBoundaryConditions();
}
@Override
public void testCDFConvertFromVector()
{
// super.testCDFConvertFromVector();
}
}