/* * File: UniformDistributionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright August 16, 2007, 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.SmoothUnivariateDistributionTestHarness; /** * * @author Kevin R. Dixon */ public class UniformDistributionTest extends SmoothUnivariateDistributionTestHarness { /** * Constructor * @param testName name */ public UniformDistributionTest( String testName ) { super( testName ); } @Override public UniformDistribution createInstance() { double a = RANDOM.nextGaussian(); double b = a + RANDOM.nextDouble() * 2.0; return new UniformDistribution( a, b ); } /** * Tests what happens when the min == max */ public void testDegenerate() { System.out.println( "CDF.degenerate" ); for( int i = 0; i < 100; i++ ) { double x = RANDOM.nextGaussian(); UniformDistribution.CDF instance = new UniformDistribution.CDF( x, x ); assertEquals( x, instance.getMinSupport() ); assertEquals( x, instance.getMaxSupport() ); assertEquals( x, instance.getMean() ); assertEquals( 0.0, instance.getVariance() ); assertEquals( x, instance.sample( RANDOM ) ); } } /** * Test of getMinSupport method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testGetMinX() { System.out.println( "getMinX" ); double a = RANDOM.nextGaussian(); double b = a + 1; UniformDistribution instance = new UniformDistribution( a, b ); assertEquals( a, instance.getMinSupport() ); } /** * Test of setMinSupport method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testSetMinX() { System.out.println( "setMinX" ); double a = RANDOM.nextGaussian(); double b = a + 1; UniformDistribution instance = new UniformDistribution( a, b ); assertEquals( a, instance.getMinSupport() ); instance.setMinSupport( b ); assertEquals( b, instance.getMinSupport() ); } /** * Test of getMaxSupport method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testGetMaxX() { System.out.println( "getMaxX" ); double a = RANDOM.nextGaussian(); double b = a + 1; UniformDistribution instance = new UniformDistribution( a, b ); assertEquals( b, instance.getMaxSupport() ); } /** * Test of setMaxSupport method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testSetMaxX() { System.out.println( "setMaxX" ); double a = RANDOM.nextGaussian(); double b = a + 1; UniformDistribution instance = new UniformDistribution( a, b ); assertEquals( b, instance.getMaxSupport() ); instance.setMaxSupport( a ); assertEquals( a, instance.getMaxSupport() ); } /** * Test of getMean method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testGetMean() { System.out.println( "PDF.getMean" ); UniformDistribution.PDF instance = this.createInstance().getProbabilityFunction(); assertEquals( 0.5 * (instance.getMinSupport() + instance.getMaxSupport()), instance.getMean(), TOLERANCE ); } /** * Test of getVariance method, of class gov.sandia.cognition.learning.util.statistics.UniformDistribution. */ public void testGetVariance() { System.out.println( "PDF.getVariance" ); UniformDistribution.PDF instance = this.createInstance().getProbabilityFunction(); double d = instance.getMaxSupport() - instance.getMinSupport(); assertEquals( d * d / 12.0, instance.getVariance(), TOLERANCE ); } @Override public void testKnownConvertToVector() { System.out.println( "CDF.convertToVector" ); UniformDistribution instance = this.createInstance(); Vector p = instance.convertToVector(); assertEquals( 2, p.getDimensionality() ); assertEquals( instance.getMinSupport(), p.getElement( 0 ) ); assertEquals( instance.getMaxSupport(), p.getElement( 1 ) ); } @Override public void testPDFKnownValues() { System.out.println( "PDF.knownValues" ); for (int i = 0; i < 100; i++) { UniformDistribution.PDF instance = this.createInstance().getProbabilityFunction(); double a = instance.getMinSupport(); double b = instance.getMaxSupport(); double x = (RANDOM.nextDouble() * (b - a + 2)) + a - 1; double h = 1 / (b - a); double y; if (x < a) { y = 0; } else if (x > b) { y = 0; } else { y = h; } double yhat = instance.evaluate( x ); assertEquals( y, yhat ); assertEquals( h, instance.evaluate( a ) ); assertEquals( h, instance.evaluate( b ) ); } } @Override public void testCDFKnownValues() { System.out.println( "CDF.knownValues" ); for (int i = 0; i < 1000; i++) { UniformDistribution.CDF instance = this.createInstance().getCDF(); double x = RANDOM.nextGaussian(); double phat = instance.evaluate( x ); double p; if (x < instance.getMinSupport()) { p = 0.0; } else if (x > instance.getMaxSupport()) { p = 1.0; } else { p = (x - instance.getMinSupport()) / (instance.getMaxSupport() - instance.getMinSupport()); } assertEquals( p, phat, TOLERANCE ); } } @Override public void testPDFConstructors() { System.out.println( "PDF Constructor" ); UniformDistribution.PDF u = new UniformDistribution.PDF(); assertEquals( UniformDistribution.DEFAULT_MIN, u.getMinSupport() ); assertEquals( UniformDistribution.DEFAULT_MAX, u.getMaxSupport() ); double a = RANDOM.nextGaussian(); double b = RANDOM.nextDouble() + a; u = new UniformDistribution.PDF( a, b ); assertEquals( a, u.getMinSupport() ); assertEquals( b, u.getMaxSupport() ); UniformDistribution.PDF u2 = new UniformDistribution.PDF( u ); assertEquals( u.getMinSupport(), u2.getMinSupport() ); assertEquals( u.getMaxSupport(), u2.getMaxSupport() ); } @Override public void testDistributionConstructors() { System.out.println( "Constructor" ); UniformDistribution u = new UniformDistribution(); assertEquals( UniformDistribution.DEFAULT_MIN, u.getMinSupport() ); assertEquals( UniformDistribution.DEFAULT_MAX, u.getMaxSupport() ); double a = RANDOM.nextGaussian(); double b = RANDOM.nextDouble() + a; u = new UniformDistribution( a, b ); assertEquals( a, u.getMinSupport() ); assertEquals( b, u.getMaxSupport() ); UniformDistribution u2 = new UniformDistribution( u ); assertEquals( u.getMinSupport(), u2.getMinSupport() ); assertEquals( u.getMaxSupport(), u2.getMaxSupport() ); } @Override public void testCDFConstructors() { System.out.println( "CDF Constructor" ); UniformDistribution.CDF u = new UniformDistribution.CDF(); assertEquals( UniformDistribution.DEFAULT_MIN, u.getMinSupport() ); assertEquals( UniformDistribution.DEFAULT_MAX, u.getMaxSupport() ); double a = RANDOM.nextGaussian(); double b = RANDOM.nextDouble() + a; u = new UniformDistribution.CDF( a, b ); assertEquals( a, u.getMinSupport() ); assertEquals( b, u.getMaxSupport() ); UniformDistribution.CDF u2 = new UniformDistribution.CDF( u ); assertEquals( u.getMinSupport(), u2.getMinSupport() ); assertEquals( u.getMaxSupport(), u2.getMaxSupport() ); } /** * MaximumLikelihoodEstimator */ public void testMaximumLikelihoodEstimator() { System.out.println( "MaximumLikelihoodEstimator" ); UniformDistribution.MaximumLikelihoodEstimator learner = new UniformDistribution.MaximumLikelihoodEstimator(); this.distributionEstimatorTest(learner); } }