1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.rng.core.source32;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.Test;
21 import org.junit.jupiter.params.ParameterizedTest;
22 import org.junit.jupiter.params.provider.CsvSource;
23
24
25
26
27
28
29 class IntProviderTest {
30
31
32
33
34 static final class FlipIntProvider extends IntProvider {
35
36 private int value;
37
38
39
40
41 FlipIntProvider(int value) {
42
43 this.value = ~value;
44 }
45
46 @Override
47 public int next() {
48
49 value = ~value;
50 return value;
51 }
52 }
53
54
55
56
57
58
59
60 @Test
61 void testNextBoolean() {
62 for (int i = 0; i < Integer.SIZE; i++) {
63
64 final int value = 1 << i;
65 final IntProvider provider = new FlipIntProvider(value);
66
67 for (int j = 0; j < Integer.SIZE; j++) {
68 final boolean expected = i == j;
69 final int index = j;
70 Assertions.assertEquals(expected, provider.nextBoolean(), () -> "Pass 1, bit " + index);
71 }
72
73 for (int j = 0; j < Integer.SIZE; j++) {
74 final boolean expected = i != j;
75 final int index = j;
76 Assertions.assertEquals(expected, provider.nextBoolean(), () -> "Pass 2, bit " + index);
77 }
78 }
79 }
80
81 @ParameterizedTest
82 @CsvSource({
83
84 "10, 0, 10",
85 "10, 5, 5",
86 "10, 9, 1",
87
88 "0, 0, 0",
89 "10, 10, 0",
90
91 "10, 0, 11",
92 "10, 10, 1",
93 "10, 10, 2147483647",
94 "10, 0, -1",
95 "10, 5, -1",
96 })
97 void testNextBytesIndices(int size, int start, int len) {
98 final FlipIntProvider rng = new FlipIntProvider(999);
99 final byte[] bytes = new byte[size];
100
101 try {
102 System.arraycopy(bytes, start, bytes, start, len);
103 } catch (IndexOutOfBoundsException ex) {
104
105
106
107 Assertions.assertThrows(IndexOutOfBoundsException.class, () ->
108 rng.nextBytes(bytes, start, len));
109 return;
110 }
111 rng.nextBytes(bytes, start, len);
112 }
113 }