/* * File: BinomialBayesianEstimatorTest.java * Authors: Kevin R. Dixon * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright Apr 12, 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.bayesian.conjugate; import gov.sandia.cognition.statistics.distribution.BetaBinomialDistribution; import gov.sandia.cognition.statistics.distribution.BetaDistribution; import gov.sandia.cognition.statistics.distribution.BinomialDistribution; import java.util.Arrays; import java.util.List; /** * Unit tests for BinomialBayesianEstimatorTest. * * @author krdixon */ public class BinomialBayesianEstimatorTest extends ConjugatePriorBayesianEstimatorTestHarness<Number,Double,BetaDistribution> { /** * Tests for class BinomialBayesianEstimatorTest. * @param testName Name of the test. */ public BinomialBayesianEstimatorTest( String testName) { super(testName); } /** * Tests the constructors of class BinomialBayesianEstimatorTest. */ public void testConstructors() { System.out.println( "Constructors" ); BinomialBayesianEstimator instance = new BinomialBayesianEstimator(); assertEquals( BinomialBayesianEstimator.DEFAULT_N, instance.getN() ); assertNotNull( instance.getParameter() ); assertEquals( 3.0, instance.computeEquivalentSampleSize( instance.getInitialBelief() ) ); int n = RANDOM.nextInt(10) + 10; instance = new BinomialBayesianEstimator(n); assertEquals( n, instance.getN() ); BetaDistribution prior = new BetaDistribution( RANDOM.nextDouble(), RANDOM.nextDouble() ); instance = new BinomialBayesianEstimator( n, prior ); assertEquals( n, instance.getN() ); assertSame( prior, instance.getInitialBelief() ); BinomialDistribution conditional = new BinomialDistribution( n, RANDOM.nextDouble() ); instance = new BinomialBayesianEstimator( conditional, prior ); assertEquals( n, instance.getN() ); assertSame( conditional, instance.getParameter().getConditionalDistribution() ); assertSame( prior, instance.getParameter().getParameterPrior() ); } @Override public BinomialBayesianEstimator createInstance() { final int n = 10; return new BinomialBayesianEstimator(n); } @Override public BinomialDistribution createConditionalDistribution() { return this.createInstance().getParameter().getConditionalDistribution(); } @Override public void testKnownValues() { System.out.println( "Known Values" ); // Bolstad 148-149 BinomialBayesianEstimator instance = new BinomialBayesianEstimator( 100, new BetaDistribution( 4.8, 19.2 ) ); List<Integer> values = Arrays.asList(26); BetaDistribution posterior = instance.learn(values); assertEquals( 4.8+26, posterior.getAlpha(), TOLERANCE ); assertEquals( 19.2+74, posterior.getBeta(), TOLERANCE ); } /** * Test of getN method, of class BinomialBayesianEstimator. */ public void testGetN() { System.out.println("getN"); BinomialBayesianEstimator instance = this.createInstance(); assertTrue( instance.getN() > 0 ); } /** * Test of setN method, of class BinomialBayesianEstimator. */ public void testSetN() { System.out.println("setN"); BinomialBayesianEstimator instance = this.createInstance(); int n = RANDOM.nextInt(10) + 10; instance.setN(n); assertEquals( n, instance.getN() ); try { instance.setN(0); fail( "N must be > 0" ); } catch (Exception e) { System.out.println( "Good: " + e ); } } }