ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/ThreadLocalRandom8Test.java
Revision: 1.1
Committed: Fri Aug 16 07:07:01 2013 UTC (10 years, 9 months ago) by jsr166
Branch: MAIN
Log Message:
introduce ThreadLocalRandom8Test, fixing 4jdk7-test-tck

File Contents

# Content
1 /*
2 * Written by Doug Lea with assistance from members of JCP JSR-166
3 * Expert Group and released to the public domain, as explained at
4 * http://creativecommons.org/publicdomain/zero/1.0/
5 */
6 import junit.framework.*;
7 import java.util.*;
8 import java.util.concurrent.ThreadLocalRandom;
9 import java.util.concurrent.atomic.AtomicLong;
10 import java.util.concurrent.atomic.AtomicInteger;
11 import java.util.concurrent.atomic.AtomicReference;
12 import java.util.concurrent.atomic.LongAdder;
13
14 public class ThreadLocalRandom8Test extends JSR166TestCase {
15
16 public static void main(String[] args) {
17 junit.textui.TestRunner.run(suite());
18 }
19 public static Test suite() {
20 return new TestSuite(ThreadLocalRandom8Test.class);
21 }
22
23 // max sampled int bound
24 static final int MAX_INT_BOUND = (1 << 28);
25
26 // max sampled long bound
27 static final long MAX_LONG_BOUND = (1L << 42);
28
29 // Number of replications for other checks
30 static final int REPS = 20;
31
32 /**
33 * Invoking sized ints, long, doubles, with negative sizes throws
34 * IllegalArgumentException
35 */
36 public void testBadStreamSize() {
37 ThreadLocalRandom r = ThreadLocalRandom.current();
38 try {
39 java.util.stream.IntStream x = r.ints(-1L);
40 shouldThrow();
41 } catch (IllegalArgumentException success) {}
42 try {
43 java.util.stream.IntStream x = r.ints(-1L, 2, 3);
44 shouldThrow();
45 } catch (IllegalArgumentException success) {}
46 try {
47 java.util.stream.LongStream x = r.longs(-1L);
48 shouldThrow();
49 } catch (IllegalArgumentException success) {}
50 try {
51 java.util.stream.LongStream x = r.longs(-1L, -1L, 1L);
52 shouldThrow();
53 } catch (IllegalArgumentException success) {}
54 try {
55 java.util.stream.DoubleStream x = r.doubles(-1L);
56 shouldThrow();
57 } catch (IllegalArgumentException success) {}
58 try {
59 java.util.stream.DoubleStream x = r.doubles(-1L, .5, .6);
60 shouldThrow();
61 } catch (IllegalArgumentException success) {}
62 }
63
64 /**
65 * Invoking bounded ints, long, doubles, with illegal bounds throws
66 * IllegalArgumentException
67 */
68 public void testBadStreamBounds() {
69 ThreadLocalRandom r = ThreadLocalRandom.current();
70 try {
71 java.util.stream.IntStream x = r.ints(2, 1);
72 shouldThrow();
73 } catch (IllegalArgumentException success) {}
74 try {
75 java.util.stream.IntStream x = r.ints(10, 42, 42);
76 shouldThrow();
77 } catch (IllegalArgumentException success) {}
78 try {
79 java.util.stream.LongStream x = r.longs(-1L, -1L);
80 shouldThrow();
81 } catch (IllegalArgumentException success) {}
82 try {
83 java.util.stream.LongStream x = r.longs(10, 1L, -2L);
84 shouldThrow();
85 } catch (IllegalArgumentException success) {}
86 try {
87 java.util.stream.DoubleStream x = r.doubles(0.0, 0.0);
88 shouldThrow();
89 } catch (IllegalArgumentException success) {}
90 try {
91 java.util.stream.DoubleStream x = r.doubles(10, .5, .4);
92 shouldThrow();
93 } catch (IllegalArgumentException success) {}
94 }
95
96 /**
97 * A parallel sized stream of ints generates the given number of values
98 */
99 public void testIntsCount() {
100 LongAdder counter = new LongAdder();
101 ThreadLocalRandom r = ThreadLocalRandom.current();
102 long size = 0;
103 for (int reps = 0; reps < REPS; ++reps) {
104 counter.reset();
105 r.ints(size).parallel().forEach(x -> {counter.increment();});
106 assertEquals(size, counter.sum());
107 size += 524959;
108 }
109 }
110
111 /**
112 * A parallel sized stream of longs generates the given number of values
113 */
114 public void testLongsCount() {
115 LongAdder counter = new LongAdder();
116 ThreadLocalRandom r = ThreadLocalRandom.current();
117 long size = 0;
118 for (int reps = 0; reps < REPS; ++reps) {
119 counter.reset();
120 r.longs(size).parallel().forEach(x -> {counter.increment();});
121 assertEquals(size, counter.sum());
122 size += 524959;
123 }
124 }
125
126 /**
127 * A parallel sized stream of doubles generates the given number of values
128 */
129 public void testDoublesCount() {
130 LongAdder counter = new LongAdder();
131 ThreadLocalRandom r = ThreadLocalRandom.current();
132 long size = 0;
133 for (int reps = 0; reps < REPS; ++reps) {
134 counter.reset();
135 r.doubles(size).parallel().forEach(x -> {counter.increment();});
136 assertEquals(size, counter.sum());
137 size += 524959;
138 }
139 }
140
141 /**
142 * Each of a parallel sized stream of bounded ints is within bounds
143 */
144 public void testBoundedInts() {
145 AtomicInteger fails = new AtomicInteger(0);
146 ThreadLocalRandom r = ThreadLocalRandom.current();
147 long size = 12345L;
148 for (int least = -15485867; least < MAX_INT_BOUND; least += 524959) {
149 for (int bound = least + 2; bound > least && bound < MAX_INT_BOUND; bound += 67867967) {
150 final int lo = least, hi = bound;
151 r.ints(size, lo, hi).parallel().
152 forEach(x -> {if (x < lo || x >= hi)
153 fails.getAndIncrement(); });
154 }
155 }
156 assertEquals(0, fails.get());
157 }
158
159 /**
160 * Each of a parallel sized stream of bounded longs is within bounds
161 */
162 public void testBoundedLongs() {
163 AtomicInteger fails = new AtomicInteger(0);
164 ThreadLocalRandom r = ThreadLocalRandom.current();
165 long size = 123L;
166 for (long least = -86028121; least < MAX_LONG_BOUND; least += 1982451653L) {
167 for (long bound = least + 2; bound > least && bound < MAX_LONG_BOUND; bound += Math.abs(bound * 7919)) {
168 final long lo = least, hi = bound;
169 r.longs(size, lo, hi).parallel().
170 forEach(x -> {if (x < lo || x >= hi)
171 fails.getAndIncrement(); });
172 }
173 }
174 assertEquals(0, fails.get());
175 }
176
177 /**
178 * Each of a parallel sized stream of bounded doubles is within bounds
179 */
180 public void testBoundedDoubles() {
181 AtomicInteger fails = new AtomicInteger(0);
182 ThreadLocalRandom r = ThreadLocalRandom.current();
183 long size = 456;
184 for (double least = 0.00011; least < 1.0e20; least *= 9) {
185 for (double bound = least * 1.0011; bound < 1.0e20; bound *= 17) {
186 final double lo = least, hi = bound;
187 r.doubles(size, lo, hi).parallel().
188 forEach(x -> {if (x < lo || x >= hi)
189 fails.getAndIncrement(); });
190 }
191 }
192 assertEquals(0, fails.get());
193 }
194
195 /**
196 * A parallel unsized stream of ints generates at least 100 values
197 */
198 public void testUnsizedIntsCount() {
199 LongAdder counter = new LongAdder();
200 ThreadLocalRandom r = ThreadLocalRandom.current();
201 long size = 100;
202 r.ints().limit(size).parallel().forEach(x -> {counter.increment();});
203 assertEquals(size, counter.sum());
204 }
205
206 /**
207 * A parallel unsized stream of longs generates at least 100 values
208 */
209 public void testUnsizedLongsCount() {
210 LongAdder counter = new LongAdder();
211 ThreadLocalRandom r = ThreadLocalRandom.current();
212 long size = 100;
213 r.longs().limit(size).parallel().forEach(x -> {counter.increment();});
214 assertEquals(size, counter.sum());
215 }
216
217 /**
218 * A parallel unsized stream of doubles generates at least 100 values
219 */
220 public void testUnsizedDoublesCount() {
221 LongAdder counter = new LongAdder();
222 ThreadLocalRandom r = ThreadLocalRandom.current();
223 long size = 100;
224 r.doubles().limit(size).parallel().forEach(x -> {counter.increment();});
225 assertEquals(size, counter.sum());
226 }
227
228 /**
229 * A sequential unsized stream of ints generates at least 100 values
230 */
231 public void testUnsizedIntsCountSeq() {
232 LongAdder counter = new LongAdder();
233 ThreadLocalRandom r = ThreadLocalRandom.current();
234 long size = 100;
235 r.ints().limit(size).forEach(x -> {counter.increment();});
236 assertEquals(size, counter.sum());
237 }
238
239 /**
240 * A sequential unsized stream of longs generates at least 100 values
241 */
242 public void testUnsizedLongsCountSeq() {
243 LongAdder counter = new LongAdder();
244 ThreadLocalRandom r = ThreadLocalRandom.current();
245 long size = 100;
246 r.longs().limit(size).forEach(x -> {counter.increment();});
247 assertEquals(size, counter.sum());
248 }
249
250 /**
251 * A sequential unsized stream of doubles generates at least 100 values
252 */
253 public void testUnsizedDoublesCountSeq() {
254 LongAdder counter = new LongAdder();
255 ThreadLocalRandom r = ThreadLocalRandom.current();
256 long size = 100;
257 r.doubles().limit(size).forEach(x -> {counter.increment();});
258 assertEquals(size, counter.sum());
259 }
260
261 }