11e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes/* 21e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * Copyright (C) 2010 The Android Open Source Project 3f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 41e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 51e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * you may not use this file except in compliance with the License. 61e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * You may obtain a copy of the License at 7f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 81e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 101e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * Unless required by applicable law or agreed to in writing, software 111e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 121e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * See the License for the specific language governing permissions and 141e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes * limitations under the License. 151e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes */ 161e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes 174557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonpackage libcore.java.util; 181e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes 192c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kongimport java.util.Arrays; 204557728efb66c455a52b7669a8eefef7a9e54854Jesse Wilsonimport java.util.Random; 211e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes 221e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughespublic class RandomTest extends junit.framework.TestCase { 231e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes public void test_subclassing() throws Exception { 241e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // http://b/2502231 251e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // Ensure that Random's constructors call setSeed by emulating the active ingredient 261e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // from the bug: the subclass' setSeed had a side-effect necessary for the correct 271e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // functioning of next. 281e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes class MyRandom extends Random { 291e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes public String state; 301e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes public MyRandom() { super(); } 311e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes public MyRandom(long l) { super(l); } 321e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes @Override protected synchronized int next(int bits) { return state.length(); } 331e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes @Override public synchronized void setSeed(long seed) { state = Long.toString(seed); } 341e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes } 351e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // Test the 0-argument constructor... 361e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes MyRandom r1 = new MyRandom(); 371e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes r1.nextInt(); 381e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes assertNotNull(r1.state); 391e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes // Test the 1-argument constructor... 401e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes MyRandom r2 = new MyRandom(123L); 411e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes r2.nextInt(); 421e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes assertNotNull(r2.state); 431e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes } 442c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 452c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_ints$() { 462c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 472c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 482c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 492c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] rands = new int[limit]; 502c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 512c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextInt(); 522c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 532c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 542c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] streamRands = new Random(0).ints().limit(limit).toArray(); 552c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 562c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 572c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 582c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_ints$L() { 592c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 602c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 612c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 622c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] rands = new int[size]; 632c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 642c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextInt(); 652c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 662c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 672c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] streamRands = new Random(0).ints(size).toArray(); 682c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 692c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).ints(size).count()); 702c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 712c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 722c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).ints(-1); 732c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 742c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 752c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 762c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 772c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_ints$II() { 782c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 792c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 802c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 812c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 822c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] rands = new int[limit]; 832c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 842c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextInt(bound - origin) + origin; 852c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 862c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 872c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] streamRands = new Random(0).ints(origin, bound).limit(limit).toArray(); 882c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 892c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 902c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 912c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).ints(100, 0); 922c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 932c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 942c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 952c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 962c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_ints$LII() { 972c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 982c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 992c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1002c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1012c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] rands = new int[size]; 1022c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 1032c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextInt(bound - origin) + origin; 1042c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1052c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1062c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong int[] streamRands = new Random(0).ints(size, origin, bound).toArray(); 1072c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 1082c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).ints(size, origin, bound).count()); 1092c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1102c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1112c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).ints(-1, 10, 20); 1122c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1132c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1142c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1152c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).ints(10, 100, 0); 1162c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1172c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1182c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1192c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1202c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_longs$() { 1212c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 1222c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1232c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1242c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] rands = new long[limit]; 1252c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 1262c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextLong(); 1272c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1282c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1292c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] streamRands = new Random(0).longs().limit(limit).toArray(); 1302c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 1312c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1322c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1332c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_longs$L() { 1342c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 1352c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1362c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1372c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] rands = new long[size]; 1382c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 1392c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextLong(); 1402c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1412c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1422c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] streamRands = new Random(0).longs(size).toArray(); 1432c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 1442c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).longs(size).count()); 1452c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1462c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1472c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).longs(-1); 1482c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1492c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1502c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1512c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1522c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_longs$II() { 1532c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 1542c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 1552c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1562c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1572c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] rands = new long[limit]; 1582c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 1592c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = (rand.nextLong() & 127) + origin; 1602c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1612c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1622c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] streamRands = new Random(0).longs(origin, bound).limit(limit).toArray(); 1632c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 1642c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1652c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1662c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).longs(100, 0); 1672c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1682c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1692c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1702c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1712c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_longs$LII() { 1722c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 1732c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 1742c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1752c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1762c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] rands = new long[size]; 1772c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 1782c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = (rand.nextLong() & 127) + origin; 1792c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1802c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1812c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong long[] streamRands = new Random(0).longs(size, origin, bound).toArray(); 1822c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 1832c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).longs(size, origin, bound).count()); 1842c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1852c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1862c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).longs(-1, 10, 20); 1872c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1882c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1892c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 1902c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).longs(10, 100, 0); 1912c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 1922c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 1932c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 1942c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1952c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_doubles$() { 1962c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 1972c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 1982c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 1992c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] rands = new double[limit]; 2002c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 2012c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextDouble(); 2022c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2032c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2042c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] streamRands = new Random(0).doubles().limit(limit).toArray(); 2052c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 2062c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2072c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2082c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_doubles$L() { 2092c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 2102c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2112c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 2122c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] rands = new double[size]; 2132c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 2142c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = rand.nextDouble(); 2152c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2162c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2172c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] streamRands = new Random(0).doubles(size).toArray(); 2182c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 2192c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).doubles(size).count()); 2202c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2212c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 2222c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).ints(-1); 2232c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 2242c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 2252c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2262c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2272c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_doubles$II() { 2282c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int limit = 128; // We can't test for every element in an infinite stream. 2292c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 2302c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2312c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 2322c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] rands = new double[limit]; 2332c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < limit; ++i) { 2342c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double r = rand.nextDouble() * (bound - origin) + origin; 2352c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong if (r >= bound) { 2362c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong r = Math.nextDown(r); 2372c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2382c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = r; 2392c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2402c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2412c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] streamRands = new Random(0).doubles(origin, bound).limit(limit).toArray(); 2422c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 2432c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2442c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 2452c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).doubles(100, 0); 2462c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 2472c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 2482c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2492c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2502c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong public void test_doubles$LII() { 2512c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int size = 32; 2522c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong final int origin = 128, bound = 256; 2532c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2542c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong Random rand = new Random(0); 2552c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] rands = new double[size]; 2562c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong for(int i = 0; i < size; ++i) { 2572c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double r = rand.nextDouble() * (bound - origin) + origin; 2582c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong if (r >= bound) { 2592c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong r = Math.nextDown(r); 2602c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2612c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong rands[i] = r; 2622c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2632c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2642c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong double[] streamRands = new Random(0).doubles(size, origin, bound).toArray(); 2652c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertTrue(Arrays.equals(rands, streamRands)); 2662c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong assertEquals(size, new Random(0).doubles(size, origin, bound).count()); 2672c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong 2682c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 2692c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).doubles(-1, 10, 20); 2702c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 2712c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 2722c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong try { 2732c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong new Random(0).doubles(10, 100, 0); 2742c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong fail(); 2752c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } catch (IllegalArgumentException expected) {} 2762c4230d24a2349039b4d7d513d0fb61542bc4cb7Yi Kong } 2771e8bd6143140f44337d6f567335afeb48b263d95Elliott Hughes} 278