ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/SplittableRandomTest.java
(Generate patch)

Comparing jsr166/src/test/tck/SplittableRandomTest.java (file contents):
Revision 1.4 by jsr166, Sun Jul 14 16:55:01 2013 UTC vs.
Revision 1.16 by jsr166, Wed Dec 31 19:05:43 2014 UTC

# Line 3 | Line 3
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.*;
6 >
7   import java.util.SplittableRandom;
8   import java.util.concurrent.atomic.AtomicInteger;
10 import java.util.concurrent.atomic.AtomicLong;
9   import java.util.concurrent.atomic.LongAdder;
10  
11 + import junit.framework.Test;
12 + import junit.framework.TestSuite;
13 +
14   public class SplittableRandomTest extends JSR166TestCase {
15  
16      public static void main(String[] args) {
# Line 39 | Line 40 | public class SplittableRandomTest extend
40      static final int NCALLS = 10000;
41  
42      // max sampled int bound
43 <    static final int MAX_INT_BOUND = (1 << 28);
43 >    static final int MAX_INT_BOUND = (1 << 26);
44  
45      // max sampled long bound
46 <    static final long MAX_LONG_BOUND = (1L << 42);
46 >    static final long MAX_LONG_BOUND = (1L << 40);
47  
48      // Number of replications for other checks
49 <    static final int REPS = 20;
49 >    static final int REPS =
50 >        Integer.getInteger("SplittableRandomTest.reps", 4);
51  
52      /**
53       * Repeated calls to nextInt produce at least two distinct results
# Line 88 | Line 90 | public class SplittableRandomTest extend
90       * same values for nextLong.
91       */
92      public void testSeedConstructor() {
93 <        for (long seed = 2; seed < MAX_LONG_BOUND; seed += 15485863)  {
93 >        for (long seed = 2; seed < MAX_LONG_BOUND; seed += 15485863) {
94              SplittableRandom sr1 = new SplittableRandom(seed);
95              SplittableRandom sr2 = new SplittableRandom(seed);
96              for (int i = 0; i < REPS; ++i)
# Line 127 | Line 129 | public class SplittableRandomTest extend
129      }
130  
131      /**
132 <     * nextInt(negative) throws IllegalArgumentException
132 >     * nextInt(non-positive) throws IllegalArgumentException
133       */
134 <    public void testNextIntBoundedNeg() {
134 >    public void testNextIntBoundNonPositive() {
135          SplittableRandom sr = new SplittableRandom();
136 <        try {
137 <            int f = sr.nextInt(-17);
138 <            shouldThrow();
139 <        } catch (IllegalArgumentException success) {}
136 >        Runnable[] throwingActions = {
137 >            () -> sr.nextInt(-17),
138 >            () -> sr.nextInt(0),
139 >            () -> sr.nextInt(Integer.MIN_VALUE),
140 >        };
141 >        assertThrows(IllegalArgumentException.class, throwingActions);
142      }
143  
144      /**
# Line 142 | Line 146 | public class SplittableRandomTest extend
146       */
147      public void testNextIntBadBounds() {
148          SplittableRandom sr = new SplittableRandom();
149 <        try {
150 <            int f = sr.nextInt(17, 2);
151 <            shouldThrow();
152 <        } catch (IllegalArgumentException success) {}
149 >        Runnable[] throwingActions = {
150 >            () -> sr.nextInt(17, 2),
151 >            () -> sr.nextInt(-42, -42),
152 >            () -> sr.nextInt(Integer.MAX_VALUE, Integer.MIN_VALUE),
153 >        };
154 >        assertThrows(IllegalArgumentException.class, throwingActions);
155      }
156  
157      /**
# Line 192 | Line 198 | public class SplittableRandomTest extend
198      }
199  
200      /**
201 <     * nextLong(negative) throws IllegalArgumentException
201 >     * nextLong(non-positive) throws IllegalArgumentException
202       */
203 <    public void testNextLongBoundedNeg() {
203 >    public void testNextLongBoundNonPositive() {
204          SplittableRandom sr = new SplittableRandom();
205 <        try {
206 <            long f = sr.nextLong(-17);
207 <            shouldThrow();
208 <        } catch (IllegalArgumentException success) {}
205 >        Runnable[] throwingActions = {
206 >            () -> sr.nextLong(-17L),
207 >            () -> sr.nextLong(0L),
208 >            () -> sr.nextLong(Long.MIN_VALUE),
209 >        };
210 >        assertThrows(IllegalArgumentException.class, throwingActions);
211      }
212  
213      /**
# Line 207 | Line 215 | public class SplittableRandomTest extend
215       */
216      public void testNextLongBadBounds() {
217          SplittableRandom sr = new SplittableRandom();
218 <        try {
219 <            long f = sr.nextLong(17, 2);
220 <            shouldThrow();
221 <        } catch (IllegalArgumentException success) {}
218 >        Runnable[] throwingActions = {
219 >            () -> sr.nextLong(17L, 2L),
220 >            () -> sr.nextLong(-42L, -42L),
221 >            () -> sr.nextLong(Long.MAX_VALUE, Long.MIN_VALUE),
222 >        };
223 >        assertThrows(IllegalArgumentException.class, throwingActions);
224      }
225  
226      /**
# Line 256 | Line 266 | public class SplittableRandomTest extend
266      }
267  
268      /**
269 +     * nextDouble(non-positive) throws IllegalArgumentException
270 +     */
271 +    public void testNextDoubleBoundNonPositive() {
272 +        SplittableRandom sr = new SplittableRandom();
273 +        Runnable[] throwingActions = {
274 +            () -> sr.nextDouble(-17.0d),
275 +            () -> sr.nextDouble(0.0d),
276 +            () -> sr.nextDouble(-Double.MIN_VALUE),
277 +            () -> sr.nextDouble(Double.NEGATIVE_INFINITY),
278 +            () -> sr.nextDouble(Double.NaN),
279 +        };
280 +        assertThrows(IllegalArgumentException.class, throwingActions);
281 +    }
282 +
283 +    /**
284 +     * nextDouble(! (least < bound)) throws IllegalArgumentException
285 +     */
286 +    public void testNextDoubleBadBounds() {
287 +        SplittableRandom sr = new SplittableRandom();
288 +        Runnable[] throwingActions = {
289 +            () -> sr.nextDouble(17.0d, 2.0d),
290 +            () -> sr.nextDouble(-42.0d, -42.0d),
291 +            () -> sr.nextDouble(Double.MAX_VALUE, Double.MIN_VALUE),
292 +            () -> sr.nextDouble(Double.NaN, 0.0d),
293 +            () -> sr.nextDouble(0.0d, Double.NaN),
294 +        };
295 +        assertThrows(IllegalArgumentException.class, throwingActions);
296 +    }
297 +
298 +    // TODO: Test infinite bounds!
299 +    //() -> sr.nextDouble(Double.NEGATIVE_INFINITY, 0.0d),
300 +    //() -> sr.nextDouble(0.0d, Double.POSITIVE_INFINITY),
301 +
302 +    /**
303       * nextDouble(least, bound) returns least <= value < bound;
304       * repeated calls produce at least two distinct results
305       */
# Line 283 | Line 327 | public class SplittableRandomTest extend
327       */
328      public void testBadStreamSize() {
329          SplittableRandom r = new SplittableRandom();
330 <        try {
331 <            java.util.stream.IntStream x = r.ints(-1L);
332 <            shouldThrow();
333 <        } catch (IllegalArgumentException success) {}
334 <        try {
335 <            java.util.stream.LongStream x = r.longs(-1L);
336 <            shouldThrow();
337 <        } catch (IllegalArgumentException success) {}
338 <        try {
295 <            java.util.stream.DoubleStream x = r.doubles(-1L);
296 <            shouldThrow();
297 <        } catch (IllegalArgumentException success) {}
330 >        Runnable[] throwingActions = {
331 >            () -> { java.util.stream.IntStream x = r.ints(-1L); },
332 >            () -> { java.util.stream.IntStream x = r.ints(-1L, 2, 3); },
333 >            () -> { java.util.stream.LongStream x = r.longs(-1L); },
334 >            () -> { java.util.stream.LongStream x = r.longs(-1L, -1L, 1L); },
335 >            () -> { java.util.stream.DoubleStream x = r.doubles(-1L); },
336 >            () -> { java.util.stream.DoubleStream x = r.doubles(-1L, .5, .6); },
337 >        };
338 >        assertThrows(IllegalArgumentException.class, throwingActions);
339      }
340  
341      /**
# Line 303 | Line 344 | public class SplittableRandomTest extend
344       */
345      public void testBadStreamBounds() {
346          SplittableRandom r = new SplittableRandom();
347 <        try {
348 <            java.util.stream.IntStream x = r.ints(2, 1);
349 <            shouldThrow();
350 <        } catch (IllegalArgumentException success) {}
351 <        try {
352 <            java.util.stream.LongStream x = r.longs(1, -2);
353 <            shouldThrow();
354 <        } catch (IllegalArgumentException success) {}
355 <        try {
315 <            java.util.stream.DoubleStream x = r.doubles(0, 0);
316 <            shouldThrow();
317 <        } catch (IllegalArgumentException success) {}
347 >        Runnable[] throwingActions = {
348 >            () -> { java.util.stream.IntStream x = r.ints(2, 1); },
349 >            () -> { java.util.stream.IntStream x = r.ints(10, 42, 42); },
350 >            () -> { java.util.stream.LongStream x = r.longs(-1L, -1L); },
351 >            () -> { java.util.stream.LongStream x = r.longs(10, 1L, -2L); },
352 >            () -> { java.util.stream.DoubleStream x = r.doubles(0.0, 0.0); },
353 >            () -> { java.util.stream.DoubleStream x = r.doubles(10, .5, .4); },
354 >        };
355 >        assertThrows(IllegalArgumentException.class, throwingActions);
356      }
357  
358      /**
# Line 326 | Line 364 | public class SplittableRandomTest extend
364          long size = 0;
365          for (int reps = 0; reps < REPS; ++reps) {
366              counter.reset();
367 <            r.ints(size).parallel().forEach(x -> {counter.increment();});
367 >            r.ints(size).parallel().forEach(x -> counter.increment());
368              assertEquals(size, counter.sum());
369              size += 524959;
370          }
# Line 341 | Line 379 | public class SplittableRandomTest extend
379          long size = 0;
380          for (int reps = 0; reps < REPS; ++reps) {
381              counter.reset();
382 <            r.longs(size).parallel().forEach(x -> {counter.increment();});
382 >            r.longs(size).parallel().forEach(x -> counter.increment());
383              assertEquals(size, counter.sum());
384              size += 524959;
385          }
# Line 356 | Line 394 | public class SplittableRandomTest extend
394          long size = 0;
395          for (int reps = 0; reps < REPS; ++reps) {
396              counter.reset();
397 <            r.doubles(size).parallel().forEach(x -> {counter.increment();});
397 >            r.doubles(size).parallel().forEach(x -> counter.increment());
398              assertEquals(size, counter.sum());
399              size += 524959;
400          }
# Line 423 | Line 461 | public class SplittableRandomTest extend
461          LongAdder counter = new LongAdder();
462          SplittableRandom r = new SplittableRandom();
463          long size = 100;
464 <        r.ints().limit(size).parallel().forEach(x -> {counter.increment();});
464 >        r.ints().limit(size).parallel().forEach(x -> counter.increment());
465          assertEquals(size, counter.sum());
466      }
467  
# Line 434 | Line 472 | public class SplittableRandomTest extend
472          LongAdder counter = new LongAdder();
473          SplittableRandom r = new SplittableRandom();
474          long size = 100;
475 <        r.longs().limit(size).parallel().forEach(x -> {counter.increment();});
475 >        r.longs().limit(size).parallel().forEach(x -> counter.increment());
476          assertEquals(size, counter.sum());
477      }
478  
# Line 445 | Line 483 | public class SplittableRandomTest extend
483          LongAdder counter = new LongAdder();
484          SplittableRandom r = new SplittableRandom();
485          long size = 100;
486 <        r.doubles().limit(size).parallel().forEach(x -> {counter.increment();});
486 >        r.doubles().limit(size).parallel().forEach(x -> counter.increment());
487          assertEquals(size, counter.sum());
488      }
489  
# Line 456 | Line 494 | public class SplittableRandomTest extend
494          LongAdder counter = new LongAdder();
495          SplittableRandom r = new SplittableRandom();
496          long size = 100;
497 <        r.ints().limit(size).forEach(x -> {counter.increment();});
497 >        r.ints().limit(size).forEach(x -> counter.increment());
498          assertEquals(size, counter.sum());
499      }
500  
# Line 467 | Line 505 | public class SplittableRandomTest extend
505          LongAdder counter = new LongAdder();
506          SplittableRandom r = new SplittableRandom();
507          long size = 100;
508 <        r.longs().limit(size).forEach(x -> {counter.increment();});
508 >        r.longs().limit(size).forEach(x -> counter.increment());
509          assertEquals(size, counter.sum());
510      }
511  
# Line 478 | Line 516 | public class SplittableRandomTest extend
516          LongAdder counter = new LongAdder();
517          SplittableRandom r = new SplittableRandom();
518          long size = 100;
519 <        r.doubles().limit(size).forEach(x -> {counter.increment();});
519 >        r.doubles().limit(size).forEach(x -> counter.increment());
520          assertEquals(size, counter.sum());
521      }
522  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines