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