/* * File: DeterministicDistributionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Feb 4, 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.math.UnivariateStatisticsUtil; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.statistics.ClosedFormDiscreteUnivariateDistributionTestHarness; import java.util.ArrayList; import java.util.Collection; /** * JUnit tests for class DeterministicDistributionTest * @author Kevin R. Dixon */ public class DeterministicDistributionTest extends ClosedFormDiscreteUnivariateDistributionTestHarness<Double> { /** * Entry point for JUnit tests for class DeterministicDistributionTest * @param testName name of this test */ public DeterministicDistributionTest( String testName) { super(testName); } @Override public void testDistributionGetVariance() { System.out.println( "getVariance" ); DeterministicDistribution instance = this.createInstance(); ArrayList<? extends Number> s1 = instance.sample(RANDOM, NUM_SAMPLES); double sampleVariance = UnivariateStatisticsUtil.computeVariance(s1); assertEquals( 0.0, sampleVariance, TOLERANCE ); } /** * Test of getPoint method, of class DeterministicDistribution. */ public void testGetPoint() { System.out.println( "getPoint" ); double point = RANDOM.nextGaussian(); DeterministicDistribution instance = new DeterministicDistribution( point ); assertEquals( point, instance.getPoint() ); } /** * Test of setPoint method, of class DeterministicDistribution. */ public void testSetPoint() { System.out.println( "setPoint" ); double point = RANDOM.nextGaussian(); DeterministicDistribution instance = new DeterministicDistribution( point ); assertEquals( point, instance.getPoint() ); double p2 = point + RANDOM.nextDouble(); instance.setPoint( p2 ); assertEquals( p2, instance.getPoint() ); } @Override public DeterministicDistribution createInstance() { double point = RANDOM.nextGaussian(); return new DeterministicDistribution( point ); } @Override public void testKnownConvertToVector() { System.out.println( "CDF.knownConvertToVector" ); DeterministicDistribution f = this.createInstance(); Vector x = f.convertToVector(); assertEquals( 1, x.getDimensionality() ); assertEquals( f.getPoint(), x.getElement( 0 ) ); } @Override public void testCDFKnownValues() { System.out.println( "CDF.knownValues" ); DeterministicDistribution.CDF f = this.createInstance().getCDF(); assertEquals( 1.0, f.evaluate( f.getPoint() ) ); for( int i = 0; i < 1000; i++ ) { double x = f.getPoint() + RANDOM.nextGaussian(); double p = (x < f.getPoint()) ? 0.0 : 1.0; assertEquals( p, f.evaluate( x ) ); } } @Override public void testCDFGetVariance() { // There is zero variance here... overriding because it's // too hard to check for something without variance in the general case. DeterministicDistribution.CDF f = this.createInstance().getCDF(); Collection<Double> samples = f.sample(RANDOM, NUM_SAMPLES); assertEquals( 0.0, UnivariateStatisticsUtil.computeVariance(samples), TOLERANCE ); } @Override public void testDistributionConstructors() { DeterministicDistribution d = new DeterministicDistribution(); assertEquals( DeterministicDistribution.DEFAULT_POINT, d.getPoint() ); double p = RANDOM.nextGaussian(); d = new DeterministicDistribution( p ); assertEquals( p, d.getPoint() ); DeterministicDistribution d2 = new DeterministicDistribution( d ); assertEquals( d.getPoint(), d2.getPoint() ); } @Override public void testCDFConstructors() { DeterministicDistribution.CDF d = new DeterministicDistribution.CDF(); assertEquals( DeterministicDistribution.DEFAULT_POINT, d.getPoint() ); double p = RANDOM.nextGaussian(); d = new DeterministicDistribution.CDF( p ); assertEquals( p, d.getPoint() ); DeterministicDistribution.CDF d2 = new DeterministicDistribution.CDF( d ); assertEquals( d.getPoint(), d2.getPoint() ); } @Override public void testPMFConstructors() { DeterministicDistribution.PMF d = new DeterministicDistribution.PMF(); assertEquals( DeterministicDistribution.DEFAULT_POINT, d.getPoint() ); double p = RANDOM.nextGaussian(); d = new DeterministicDistribution.PMF( p ); assertEquals( p, d.getPoint() ); DeterministicDistribution.PMF d2 = new DeterministicDistribution.PMF( d ); assertEquals( d.getPoint(), d2.getPoint() ); } @Override public void testKnownGetDomain() { System.out.println( "Known Domain" ); DeterministicDistribution instance = this.createInstance(); Collection<Double> domain = instance.getDomain(); assertEquals( 1, domain.size() ); assertEquals( instance.getPoint(), CollectionUtil.getFirst(domain).doubleValue() ); } @Override public void testPMFKnownValues() { System.out.println( "PMF Known Values" ); DeterministicDistribution.PMF pmf = this.createInstance().getProbabilityFunction(); assertEquals( 1.0, pmf.evaluate(pmf.getPoint()) ); assertEquals( 0.0, pmf.logEvaluate(pmf.getPoint()) ); assertEquals( 0.0, pmf.evaluate(pmf.getPoint()+RANDOM.nextDouble()) ); } @Override public void testPMFSample() { // Need to nerf this because the Chi-Square test requires at least // two domain values... } }