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.RestorableUniformRandomProvider;
20 import org.apache.commons.rng.UniformRandomProvider;
21 import org.apache.commons.rng.sampling.RandomAssert;
22 import org.apache.commons.rng.sampling.SharedStateSampler;
23 import org.apache.commons.rng.simple.RandomSource;
24 import org.junit.Test;
25
26
27
28
29 public class GaussianSamplerTest {
30
31
32
33 @Test(expected = IllegalArgumentException.class)
34 public void testConstructorThrowsWithZeroStandardDeviation() {
35 final RestorableUniformRandomProvider rng =
36 RandomSource.create(RandomSource.SPLIT_MIX_64);
37 final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng);
38 final double mean = 1;
39 final double standardDeviation = 0;
40 GaussianSampler.of(gauss, mean, standardDeviation);
41 }
42
43
44
45
46 @Test
47 public void testSharedStateSampler() {
48 final UniformRandomProvider rng1 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
49 final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
50 final NormalizedGaussianSampler gauss = new ZigguratNormalizedGaussianSampler(rng1);
51 final double mean = 1.23;
52 final double standardDeviation = 4.56;
53 final SharedStateContinuousSampler sampler1 =
54 GaussianSampler.of(gauss, mean, standardDeviation);
55 final SharedStateContinuousSampler sampler2 = sampler1.withUniformRandomProvider(rng2);
56 RandomAssert.assertProduceSameSequence(sampler1, sampler2);
57 }
58
59
60
61
62
63 @Test(expected = UnsupportedOperationException.class)
64 public void testSharedStateSamplerThrowsIfUnderlyingSamplerDoesNotShareState() {
65 final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
66 final NormalizedGaussianSampler gauss = new NormalizedGaussianSampler() {
67 @Override
68 public double sample() {
69 return 0;
70 }
71 };
72 final double mean = 1.23;
73 final double standardDeviation = 4.56;
74 final SharedStateContinuousSampler sampler1 =
75 GaussianSampler.of(gauss, mean, standardDeviation);
76 sampler1.withUniformRandomProvider(rng2);
77 }
78
79
80
81
82
83 @Test(expected = UnsupportedOperationException.class)
84 public void testSharedStateSamplerThrowsIfUnderlyingSamplerReturnsWrongSharedState() {
85 final UniformRandomProvider rng2 = RandomSource.create(RandomSource.SPLIT_MIX_64, 0L);
86 final NormalizedGaussianSampler gauss = new BadSharedStateNormalizedGaussianSampler();
87 final double mean = 1.23;
88 final double standardDeviation = 4.56;
89 final SharedStateContinuousSampler sampler1 =
90 GaussianSampler.of(gauss, mean, standardDeviation);
91 sampler1.withUniformRandomProvider(rng2);
92 }
93
94
95
96
97
98
99
100 private static class BadSharedStateNormalizedGaussianSampler
101 implements NormalizedGaussianSampler, SharedStateSampler<Integer> {
102 @Override
103 public double sample() {
104 return 0;
105 }
106
107 @Override
108 public Integer withUniformRandomProvider(UniformRandomProvider rng) {
109
110 return Integer.valueOf(44);
111 }
112 }
113 }