/* * File: CauchyDistributionTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Feb 25, 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; /** * Unit tests for CauchyDistributionTest. * * @author krdixon */ public class CauchyDistributionTest extends SmoothUnivariateDistributionTestHarness { /** * Tests for class CauchyDistributionTest. * @param testName Name of the test. */ public CauchyDistributionTest( String testName) { super(testName); } /** * Test of getLocation method, of class CauchyDistribution. */ public void testGetLocation() { System.out.println("getLocation"); double location = RANDOM.nextGaussian(); CauchyDistribution instance = this.createInstance(); instance.setLocation(location); assertEquals( location, instance.getLocation() ); } /** * Test of setLocation method, of class CauchyDistribution. */ public void testSetLocation() { System.out.println("setLocation"); double location = RANDOM.nextGaussian(); CauchyDistribution instance = this.createInstance(); instance.setLocation(location); assertEquals( location, instance.getLocation() ); } /** * Test of getScale method, of class CauchyDistribution. */ public void testGetScale() { System.out.println("getScale"); CauchyDistribution instance = this.createInstance(); assertTrue( instance.getScale() > 0.0 ); } /** * Test of setScale method, of class CauchyDistribution. */ public void testSetScale() { System.out.println("setScale"); double scale = RANDOM.nextDouble() * 5.0; CauchyDistribution 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 CauchyDistribution createInstance() { double location = RANDOM.nextGaussian(); double scale = RANDOM.nextDouble() * 5.0; return new CauchyDistribution( location, scale ); } @Override public void testPDFConstructors() { System.out.println( "PDF Constructors" ); CauchyDistribution.PDF instance = new CauchyDistribution.PDF(); assertEquals( CauchyDistribution.DEFAULT_LOCATION, instance.getLocation() ); assertEquals( CauchyDistribution.DEFAULT_SCALE, instance.getScale() ); double location = RANDOM.nextGaussian(); double scale = RANDOM.nextDouble(); instance = new CauchyDistribution.PDF( location, scale ); assertEquals( location, instance.getLocation() ); assertEquals( scale, instance.getScale() ); CauchyDistribution.PDF i2 = new CauchyDistribution.PDF( instance ); assertNotSame( instance, i2 ); assertEquals( instance.getLocation(), i2.getLocation() ); assertEquals( instance.getScale(), i2.getScale() ); } @Override public void testPDFKnownValues() { System.out.println( "PDF Known Values" ); CauchyDistribution.PDF pdf = new CauchyDistribution.PDF( 1.0, 2.0 ); assertEquals( 0.159154943091895, pdf.evaluate(1.0), TOLERANCE ); assertEquals( 0.127323954473516, pdf.evaluate(2.0), TOLERANCE ); assertEquals( 0.048970751720583, pdf.evaluate(-2.0), TOLERANCE ); } @Override public void testKnownConvertToVector() { CauchyDistribution instance = this.createInstance(); Vector p = instance.convertToVector(); assertEquals( 2, p.getDimensionality() ); assertEquals( instance.getLocation(), p.getElement(0), TOLERANCE ); assertEquals( instance.getScale(), p.getElement(1), TOLERANCE ); } @Override public void testDistributionConstructors() { System.out.println( "Constructors" ); CauchyDistribution instance = new CauchyDistribution(); assertEquals( CauchyDistribution.DEFAULT_LOCATION, instance.getLocation() ); assertEquals( CauchyDistribution.DEFAULT_SCALE, instance.getScale() ); double location = RANDOM.nextGaussian(); double scale = RANDOM.nextDouble(); instance = new CauchyDistribution( location, scale ); assertEquals( location, instance.getLocation() ); assertEquals( scale, instance.getScale() ); CauchyDistribution i2 = new CauchyDistribution( instance ); assertNotSame( instance, i2 ); assertEquals( instance.getLocation(), i2.getLocation() ); assertEquals( instance.getScale(), i2.getScale() ); } @Override public void testCDFConstructors() { System.out.println( "CDF Constructors" ); CauchyDistribution.CDF instance = new CauchyDistribution.CDF(); assertEquals( CauchyDistribution.DEFAULT_LOCATION, instance.getLocation() ); assertEquals( CauchyDistribution.DEFAULT_SCALE, instance.getScale() ); double location = RANDOM.nextGaussian(); double scale = RANDOM.nextDouble(); instance = new CauchyDistribution.CDF( location, scale ); assertEquals( location, instance.getLocation() ); assertEquals( scale, instance.getScale() ); CauchyDistribution.CDF i2 = new CauchyDistribution.CDF( instance ); assertNotSame( instance, i2 ); assertEquals( instance.getLocation(), i2.getLocation() ); assertEquals( instance.getScale(), i2.getScale() ); } @Override public void testCDFKnownValues() { CauchyDistribution.CDF cdf = new CauchyDistribution.CDF( 1.0, 2.0 ); assertEquals( 0.5, cdf.evaluate(1.0), TOLERANCE ); assertEquals( 0.647583617650433, cdf.evaluate(2.0), TOLERANCE ); assertEquals( 0.187167041810999, cdf.evaluate(-2.0), TOLERANCE ); } @Override public void testPDFMonteCarlo() { // We're not going to call PDF Monte Carlo because we're already happy // that we're working ;) // And because the mean of the Cauchy is so jacked up. } }