/* * File: ParetoDistributionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Mar 10, 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.SmoothUnivariateDistributionTestHarness; import java.util.Random; /** * Unit tests for ParetoDistributionTest. * * @author krdixon */ public class ParetoDistributionTest extends SmoothUnivariateDistributionTestHarness { /** * Tests for class ParetoDistributionTest. * @param testName Name of the test. */ public ParetoDistributionTest( String testName) { super(testName); } @Override public void testDistributionConstructors() { System.out.println( "Constructors" ); ParetoDistribution instance = new ParetoDistribution(); assertEquals( ParetoDistribution.DEFAULT_SHAPE, instance.getShape() ); assertEquals( ParetoDistribution.DEFALUT_SCALE, instance.getScale() ); double shape = RANDOM.nextDouble()*10.0 + 2.0; double scale = RANDOM.nextDouble()*10.0; double shift = RANDOM.nextGaussian(); instance = new ParetoDistribution( shape, scale, shift ); assertEquals( shape, instance.getShape() ); assertEquals( scale, instance.getScale() ); ParetoDistribution copy = new ParetoDistribution( instance ); assertNotSame( instance, copy ); assertEquals( instance.getShape(), copy.getShape() ); assertEquals( instance.getScale(), copy.getScale() ); } @Override public void testPDFConstructors() { System.out.println( "PDF Constructors" ); ParetoDistribution.PDF instance = new ParetoDistribution.PDF(); assertEquals( ParetoDistribution.DEFAULT_SHAPE, instance.getShape() ); assertEquals( ParetoDistribution.DEFALUT_SCALE, instance.getScale() ); double shape = RANDOM.nextDouble()*10.0 + 2.0; double scale = RANDOM.nextDouble()*10.0; double shift = RANDOM.nextGaussian(); instance = new ParetoDistribution.PDF( shape, scale, shift ); assertEquals( shape, instance.getShape() ); assertEquals( scale, instance.getScale() ); ParetoDistribution.PDF copy = new ParetoDistribution.PDF( instance ); assertNotSame( instance, copy ); assertEquals( instance.getShape(), copy.getShape() ); assertEquals( instance.getScale(), copy.getScale() ); } @Override public void testCDFConstructors() { System.out.println( "CDF Constructors" ); ParetoDistribution.CDF instance = new ParetoDistribution.CDF(); assertEquals( ParetoDistribution.DEFAULT_SHAPE, instance.getShape() ); assertEquals( ParetoDistribution.DEFALUT_SCALE, instance.getScale() ); double shape = RANDOM.nextDouble()*10.0 + 2.0; double scale = RANDOM.nextDouble()*10.0; double shift = RANDOM.nextGaussian(); instance = new ParetoDistribution.CDF( shape, scale, shift ); assertEquals( shape, instance.getShape() ); assertEquals( scale, instance.getScale() ); ParetoDistribution.CDF copy = new ParetoDistribution.CDF( instance ); assertNotSame( instance, copy ); assertEquals( instance.getShape(), copy.getShape() ); assertEquals( instance.getScale(), copy.getScale() ); } /** * Test of getShape method, of class ParetoDistribution. */ public void testGetShape() { System.out.println("getShape"); ParetoDistribution instance = this.createInstance(); assertTrue( instance.getShape() > 0.0 ); } /** * Test of setShape method, of class ParetoDistribution. */ public void testSetShape() { System.out.println("setShape"); double shape = RANDOM.nextDouble() + 1.0; ParetoDistribution instance = this.createInstance(); 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 ParetoDistribution. */ public void testGetScale() { System.out.println("getScale"); ParetoDistribution instance = this.createInstance(); assertTrue( instance.getScale() > 0.0 ); } /** * Test of setScale method, of class ParetoDistribution. */ public void testSetScale() { System.out.println("setScale"); double scale = RANDOM.nextDouble() + 1.0; ParetoDistribution instance = this.createInstance(); 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 ); } } @Override public ParetoDistribution createInstance() { double shape = RANDOM.nextDouble()*10.0 + 2.0; double scale = RANDOM.nextDouble()*10.0; double shift = 5; return new ParetoDistribution( shape, scale, shift ); } @Override public void testPDFKnownValues() { System.out.println( "PDF Known Values" ); final double shift = RANDOM.nextGaussian(); ParetoDistribution.PDF pdf = new ParetoDistribution.PDF( 3.0, 2.0, shift ); assertEquals( 0.0, pdf.evaluate(0.0-shift) ); assertEquals( 0.0, pdf.evaluate(pdf.getScale()-shift) ); assertEquals( 0.296296296296, pdf.evaluate(3.0-shift), TOLERANCE ); assertEquals( 0.038400000000, pdf.evaluate(5.0-shift), TOLERANCE ); assertEquals( 0.002400000000, pdf.evaluate(10.0-shift), TOLERANCE ); } @Override public void testKnownConvertToVector() { System.out.println( "Known convertToVector" ); ParetoDistribution instance = this.createInstance(); Vector p = instance.convertToVector(); assertEquals( 3, p.getDimensionality() ); assertEquals( instance.getShape(), p.getElement(0) ); assertEquals( instance.getScale(), p.getElement(1) ); assertEquals( instance.getShift(), p.getElement(2) ); } @Override public void testCDFKnownValues() { System.out.println( "CDF Known Values" ); final double shift = RANDOM.nextGaussian(); ParetoDistribution.CDF cdf = new ParetoDistribution.CDF( 3.0, 2.0, shift ); assertEquals( 0.0, cdf.evaluate(0.0-shift) ); assertEquals( 0.0, cdf.evaluate(cdf.getScale()-shift) ); assertEquals( 0.703703703703703, cdf.evaluate(3.0-shift), TOLERANCE ); assertEquals( 0.936000000000000, cdf.evaluate(5.0-shift), TOLERANCE ); assertEquals( 0.992000000000000, cdf.evaluate(10.0-shift), TOLERANCE ); } @Override public void testDistributionGetVariance() { // Random seed 1 seemed to make it barf. RANDOM = new Random(2); super.testDistributionGetVariance(); } /** * MaximumLikelihoodEstimator */ // public void testMaximumLikelihoodEstimator() // { // System.out.println( "MaximumLikelihoodEstimator" ); // ParetoDistribution.MaximumLikelihoodEstimator learner = // new ParetoDistribution.MaximumLikelihoodEstimator(); // this.distributionEstimatorTest(learner); // } }