/* * File: ClosedFormIntegerDistributionTestHarness.java * Authors: Justin Basilico * Project: Cognitive Foundry * * Copyright 2014 Cognitive Foundry. All rights reserved. */ package gov.sandia.cognition.statistics; import java.util.Random; import org.junit.Assert; /** * Unit tests for class {@link AbstractClosedFormIntegerDistribution}. * * @author Justin Basilico * @since 3.4.0 */ public abstract class ClosedFormIntegerDistributionTestHarness extends ClosedFormDiscreteUnivariateDistributionTestHarness<Number> { /** * Creates a new test. * * @param testName * The test name. */ public ClosedFormIntegerDistributionTestHarness( final String testName) { super(testName); } public abstract AbstractClosedFormIntegerDistribution createInstance(); /** * Test of sampleAsInt method, of class IntegerDistribution. */ public void testDistributionSampleAsInt() { System.out.println("IntegerDistribution.sampleAsInt(random)"); // Make sure that when we re-feed an identical RANDOM seed, then // we get an equal sample from the distribution. But different seeds // should give us different results... maybe. Random random1a = new Random(1); IntegerDistribution instance = this.createInstance(); int r11 = instance.sampleAsInt(random1a); int rx2 = instance.sampleAsInt(random1a); Random random1b = new Random(1); int r13 = instance.sampleAsInt(random1b); assertEquals(r11, r13); int r21 = instance.sampleAsInt(new Random(2)); assertEquals(instance.sample(new Random(2)), r21); Random random3 = new Random(3); int r31 = instance.sampleAsInt(random3); int streak = 1; while (streak < 100) { int sample = instance.sampleAsInt(random3); if (sample != r31) { break; } } assertTrue(streak < 100); Random random1c = new Random(1); int r14 = instance.sampleAsInt(random1c); assertEquals(r11, r14); assertEquals(r13, r14); } /** * Test of sampleAsInts method, of class IntegerDistribution. */ public void testDistributionSampleAsInts() { System.out.println("IntegerDistribution.sampleAsInts(random,int)"); IntegerDistribution instance = this.createInstance(); // Identical RANDOM seeds should produce equal sequences. // (Can't say anything about different seeds because deterministic // distributions always return the same result, regardless of seed.) Random r1a = new Random(1); int[] s1a = instance.sampleAsInts(r1a, NUM_SAMPLES); assertEquals(NUM_SAMPLES, s1a.length); Random r1b = new Random(1); int[] s1b = instance.sampleAsInts(r1b, NUM_SAMPLES); assertEquals(NUM_SAMPLES, s1b.length); assertEquals(s1a.length, s1b.length); Assert.assertArrayEquals(s1a, s1b); } /** * Test of sampleInto method, of class IntegerDistribution. */ public void testDistributionSampleInto_ints() { System.out.println("SmoothUnivariateDistribution.sampleInto(random,int[],int,int)"); IntegerDistribution instance = this.createInstance(); // Identical RANDOM seeds should produce equal squences. // (Can't say anything about different seeds because deterministic // distributions always return the same result, regardless of seed.) Random r1a = new Random(1); int[] s1a = new int[NUM_SAMPLES]; instance.sampleInto(r1a, s1a, 0, NUM_SAMPLES); Random r1b = new Random(1); int[] s1b = instance.sampleAsInts(r1b, NUM_SAMPLES); assertEquals(s1a.length, s1b.length); Assert.assertArrayEquals(s1a, s1b); // Make sure the data isn't over-written. int[] r1c = new int[3 * NUM_SAMPLES + 5]; for (int i = 0; i < r1c.length; i++) { r1c[i] = i; } instance.sampleInto(new Random(1), r1c, 2, 3 * NUM_SAMPLES); assertEquals(0, r1c[0]); assertEquals(1, r1c[1]); assertEquals(r1c.length - 3, r1c[r1c.length - 3]); assertEquals(r1c.length - 2, r1c[r1c.length - 2]); assertEquals(r1c.length - 1, r1c[r1c.length - 1]); } }