/* * File: BernoulliDistributionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Feb 5, 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.collection.CollectionUtil; import gov.sandia.cognition.collection.IntegerSpan; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.statistics.ClosedFormIntegerDistributionTestHarness; /** * JUnit tests for class BernoulliDistributionTest * @author Kevin R. Dixon */ public class BernoulliDistributionTest extends ClosedFormIntegerDistributionTestHarness { /** * Entry point for JUnit tests for class BernoulliDistributionTest * @param testName name of this test */ public BernoulliDistributionTest( String testName) { super(testName); NUM_SAMPLES = 10*NUM_SAMPLES; } /** * Test of getVariance method, of class BernoulliDistribution. */ public void testGetVariance() { System.out.println( "getVariance" ); BernoulliDistribution instance = this.createInstance(); double variance = instance.getP() * (1.0-instance.getP()); double result = instance.getVariance(); assertEquals( variance, result ); } /** * Test getMean */ public void testGetMean() { System.out.println( "getMean" ); BernoulliDistribution instance = this.createInstance(); double mean = instance.getP(); double result = instance.getMean(); assertEquals( mean, result ); } /** * Test of getDomain method, of class BernoulliDistribution. */ @Override public void testKnownGetDomain() { System.out.println( "getDomain" ); BernoulliDistribution instance = this.createInstance(); IntegerSpan result = instance.getDomain(); assertEquals( 2, result.size() ); assertEquals( 0, CollectionUtil.getElement(result,0).intValue() ); assertEquals( 1, CollectionUtil.getElement(result,1).intValue() ); } /** * Test of getP method, of class BernoulliDistribution. */ public void testGetP() { System.out.println( "getP" ); double p = RANDOM.nextDouble(); BernoulliDistribution instance = new BernoulliDistribution.PMF( p ); assertEquals( p, instance.getP() ); instance = new BernoulliDistribution.PMF(); assertEquals( BernoulliDistribution.DEFAULT_P, instance.getP() ); } /** * Test of setP method, of class BernoulliDistribution. */ public void testSetP() { System.out.println( "setP" ); double p = RANDOM.nextDouble(); BernoulliDistribution instance = new BernoulliDistribution.PMF( p ); assertEquals( p, instance.getP() ); double p2 = p * RANDOM.nextDouble(); instance.setP( p2 ); assertEquals( p2, instance.getP() ); double p3 = 0.0; instance.setP( p3 ); assertEquals( p3, instance.getP() ); double p4 = 1.0; instance.setP( p4 ); assertEquals( p4, instance.getP() ); try { double p5 = -1.0; instance.setP( p5 ); fail( "p must be >= 0.0" ); } catch (Exception e) { System.out.println( "Good: " + e ); } try { double p6 = 2.0; instance.setP( p6 ); fail( "p must be <= 1.0" ); } catch (Exception e) { System.out.println( "Good: " + e ); } } @Override public void testPMFKnownValues() { System.out.println( "PMF.knownValues" ); BernoulliDistribution.PMF pmf = this.createInstance().getProbabilityFunction(); assertEquals( 0.0, pmf.evaluate( -1 ) ); assertEquals( 1.0-pmf.getP(), pmf.evaluate( 0 ) ); assertEquals( pmf.getP(), pmf.evaluate( 1 ) ); assertEquals( 0.0, pmf.evaluate( 2 ) ); } @Override public BernoulliDistribution createInstance() { return new BernoulliDistribution( RANDOM.nextDouble() ); } @Override public void testKnownConvertToVector() { System.out.println( "CDF.knownConvertToVector" ); BernoulliDistribution cdf = this.createInstance(); Vector x = cdf.convertToVector(); assertEquals( 1, x.getDimensionality() ); assertEquals( cdf.getP(), x.getElement( 0 ) ); } @Override public void testCDFKnownValues() { System.out.println( "CDF.knownValues" ); BernoulliDistribution.CDF cdf = this.createInstance().getCDF(); assertEquals( 0.0, cdf.evaluate( -1 ) ); assertEquals( 1.0-cdf.getP(), cdf.evaluate( 0 ) ); assertEquals( 1.0, cdf.evaluate( 1 ) ); assertEquals( 1.0, cdf.evaluate( 2 ) ); } @Override public void testDistributionConstructors() { System.out.println( "Constructors" ); BernoulliDistribution instance = new BernoulliDistribution(); assertEquals( BernoulliDistribution.DEFAULT_P, instance.getP() ); double p = RANDOM.nextDouble(); instance = new BernoulliDistribution( p ); assertEquals( p, instance.getP() ); BernoulliDistribution d2 = new BernoulliDistribution( instance ); assertNotSame( instance, d2 ); assertEquals( instance.getP(), d2.getP() ); } @Override public void testCDFConstructors() { System.out.println( "CDF.Constructors" ); BernoulliDistribution.CDF instance = new BernoulliDistribution.CDF(); assertEquals( BernoulliDistribution.DEFAULT_P, instance.getP() ); double p = RANDOM.nextDouble(); instance = new BernoulliDistribution.CDF( p ); assertEquals( p, instance.getP() ); BernoulliDistribution.CDF d2 = new BernoulliDistribution.CDF( instance ); assertNotSame( instance, d2 ); assertEquals( instance.getP(), d2.getP() ); String b = instance.toString(); System.out.println( "Bernoulli: " + b ); assertTrue( b.length() > 0 ); } @Override public void testPMFConstructors() { System.out.println( "PMF.Constructors" ); BernoulliDistribution.PMF instance = new BernoulliDistribution.PMF(); assertEquals( BernoulliDistribution.DEFAULT_P, instance.getP() ); double p = RANDOM.nextDouble(); instance = new BernoulliDistribution.PMF( p ); assertEquals( p, instance.getP() ); BernoulliDistribution.PMF d2 = new BernoulliDistribution.PMF( instance ); assertNotSame( instance, d2 ); assertEquals( instance.getP(), d2.getP() ); } }