1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.rng.sampling.distribution;
18
19 import org.apache.commons.rng.UniformRandomProvider;
20 import org.apache.commons.rng.sampling.RandomAssert;
21 import org.apache.commons.rng.simple.RandomSource;
22 import org.junit.Assert;
23 import org.junit.Test;
24
25
26
27
28 public class SmallMeanPoissonSamplerTest {
29
30
31
32 @Test(expected = IllegalArgumentException.class)
33 public void testConstructorThrowsWithMeanThatSetsProbabilityP0ToZero() {
34 final UniformRandomProvider rng =
35 RandomSource.create(RandomSource.SPLIT_MIX_64);
36 final double p0 = Double.MIN_VALUE;
37
38
39 final double mean = -Math.log(p0) + 1;
40 SmallMeanPoissonSampler.of(rng, mean);
41 }
42
43
44
45
46 @Test(expected = IllegalArgumentException.class)
47 public void testConstructorThrowsWithZeroMean() {
48 final UniformRandomProvider rng =
49 RandomSource.create(RandomSource.SPLIT_MIX_64);
50 final double mean = 0;
51 SmallMeanPoissonSampler.of(rng, mean);
52 }
53
54
55
56
57 @Test
58 public void testSampleUpperBounds() {
59
60 final UniformRandomProvider rng = new UniformRandomProvider() {
61
62 public long nextLong(long n) { return 0; }
63 public long nextLong() { return 0; }
64 public int nextInt(int n) { return 0; }
65 public int nextInt() { return 0; }
66 public float nextFloat() { return 0; }
67 public double nextDouble() { return 1;}
68 public void nextBytes(byte[] bytes, int start, int len) {}
69 public void nextBytes(byte[] bytes) {}
70 public boolean nextBoolean() { return false; }
71
72 };
73 for (double mean : new double[] {0.5, 1, 1.5, 2.2}) {
74 final SharedStateDiscreteSampler sampler = SmallMeanPoissonSampler.of(rng, mean);
75 final int expected = (int) Math.ceil(1000 * mean);
76 Assert.assertEquals(expected, sampler.sample());
77 }
78 }
79
80
81
82
83 @Test
84 public void testSharedStateSampler() {
85 final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
86 final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
87 final double mean = 1.23;
88 final SharedStateDiscreteSampler sampler1 =
89 SmallMeanPoissonSampler.of(rng1, mean);
90 final SharedStateDiscreteSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
91 RandomAssert.assertProduceSameSequence(sampler1, sampler2);
92 }
93 }