1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.rng.simple;
18
19 import java.util.Random;
20
21 import org.apache.commons.rng.UniformRandomProvider;
22 import org.apache.commons.rng.core.source64.LongProvider;
23 import org.junit.Assert;
24 import org.junit.Test;
25
26
27
28
29 public class JDKRandomWrapperTest {
30
31
32
33 @Test
34 public void testJDKRandomEquivalence() {
35
36 final long seed = RandomSource.createLong();
37 final Random rng1 = new Random(seed);
38 final UniformRandomProvider rng2 = new JDKRandomWrapper(new Random(seed));
39 checkSameSequence(rng1, rng2);
40 }
41
42
43
44
45
46
47
48 private static void checkSameSequence(Random rng1,
49 UniformRandomProvider rng2) {
50 for (int i = 0; i < 4; i++) {
51 Assert.assertEquals(rng1.nextInt(),
52 rng2.nextInt());
53 }
54 for (int i = 0; i < 7; i++) {
55 Assert.assertEquals(rng1.nextLong(),
56 rng2.nextLong());
57 }
58 for (int i = 0; i < 9; i++) {
59 Assert.assertEquals(rng1.nextFloat(),
60 rng2.nextFloat(),
61 0f);
62 }
63 for (int i = 0; i < 12; i++) {
64 Assert.assertEquals(rng1.nextDouble(),
65 rng2.nextDouble(),
66 0d);
67 }
68 for (int i = 0; i < 18; i++) {
69 Assert.assertEquals(rng1.nextBoolean(),
70 rng2.nextBoolean());
71 }
72 for (int i = 0; i < 19; i++) {
73 final int max = i + 123456;
74 Assert.assertEquals(rng1.nextInt(max),
75 rng2.nextInt(max));
76 }
77
78 final int len = 233;
79 final byte[] store1 = new byte[len];
80 final byte[] store2 = new byte[len];
81 rng1.nextBytes(store1);
82 rng2.nextBytes(store2);
83 for (int i = 0; i < len; i++) {
84 Assert.assertEquals(store1[i],
85 store2[i]);
86 }
87 }
88
89
90
91
92
93 @Test
94 public void testNextLongInRange() {
95 final long seed = RandomSource.createLong();
96
97
98
99 final UniformRandomProvider rng1 = new LongProvider() {
100 private final Random random = new Random(seed);
101
102 @Override
103 public long next() {
104 return random.nextLong();
105 }
106 };
107 final UniformRandomProvider rng2 = new JDKRandomWrapper(new Random(seed));
108
109
110
111
112
113
114
115
116
117 for (final long max : new long[] {1, 256, 56757, 1L << 32, (1L << 62) + 1}) {
118 for (int i = 0; i < 10; i++) {
119 Assert.assertEquals(rng1.nextLong(max),
120 rng2.nextLong(max));
121 }
122 }
123 }
124
125 @Test(expected = IllegalArgumentException.class)
126 public void testNextLongInRangeThrows() {
127 final UniformRandomProvider rng1 = new JDKRandomWrapper(new Random(5675767L));
128 rng1.nextLong(0);
129 }
130
131
132
133
134
135 @Test
136 public void testNextByteInRange() {
137 final long seed = RandomSource.createLong();
138 final Random rng1 = new Random(seed);
139 final UniformRandomProvider rng2 = new JDKRandomWrapper(new Random(seed));
140
141 checkSameBytes(rng1, rng2, 1, 0, 1);
142 checkSameBytes(rng1, rng2, 100, 0, 100);
143 checkSameBytes(rng1, rng2, 100, 10, 90);
144 checkSameBytes(rng1, rng2, 245, 67, 34);
145 }
146
147
148
149
150
151
152
153
154
155
156
157
158 private static void checkSameBytes(Random rng1,
159 UniformRandomProvider rng2,
160 int size, int start, int length) {
161 final byte[] store1 = new byte[length];
162 final byte[] store2 = new byte[size];
163 rng1.nextBytes(store1);
164 rng2.nextBytes(store2, start, length);
165 for (int i = 0; i < length; i++) {
166 Assert.assertEquals(store1[i],
167 store2[i + start]);
168 }
169 }
170 }