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 java.util.concurrent.ThreadLocalRandom;
20 import org.apache.commons.rng.UniformRandomProvider;
21 import org.apache.commons.rng.sampling.RandomAssert;
22 import org.junit.jupiter.api.Assertions;
23 import org.junit.jupiter.api.RepeatedTest;
24 import org.junit.jupiter.api.Test;
25 import org.junit.jupiter.params.ParameterizedTest;
26 import org.junit.jupiter.params.provider.ValueSource;
27
28
29
30
31 class DiscreteSamplerTest {
32 @Test
33 void testSamplesUnlimitedSize() {
34 final DiscreteSampler s = RandomAssert.createRNG()::nextInt;
35 Assertions.assertEquals(Long.MAX_VALUE, s.samples().spliterator().estimateSize());
36 }
37
38 @RepeatedTest(value = 3)
39 void testSamples() {
40 final UniformRandomProvider[] rngs = RandomAssert.createRNG(2);
41 final DiscreteSampler s1 = rngs[0]::nextInt;
42 final DiscreteSampler s2 = rngs[1]::nextInt;
43 final int count = ThreadLocalRandom.current().nextInt(3, 13);
44 Assertions.assertArrayEquals(createSamples(s1, count),
45 s2.samples().limit(count).toArray());
46 }
47
48 @ParameterizedTest
49 @ValueSource(ints = {0, 1, 2, 5, 13})
50 void testSamples(int streamSize) {
51 final UniformRandomProvider[] rngs = RandomAssert.createRNG(2);
52 final DiscreteSampler s1 = rngs[0]::nextInt;
53 final DiscreteSampler s2 = rngs[1]::nextInt;
54 Assertions.assertArrayEquals(createSamples(s1, streamSize),
55 s2.samples(streamSize).toArray());
56 }
57
58
59
60
61
62
63
64
65 private static int[] createSamples(DiscreteSampler sampler, int count) {
66 final int[] data = new int[count];
67 for (int i = 0; i < count; i++) {
68 data[i] = sampler.sample();
69 }
70 return data;
71 }
72 }