/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.emultest.java.util; import com.google.gwt.junit.client.GWTTestCase; import java.util.Random; /** * Tests for GWT's emulation of the JRE Random class. The JRE specifies the * exact algorithm used to generate the pseudorandom output. */ public class RandomTest extends GWTTestCase { /** * Sets module name so that javascript compiler can operate. */ @Override public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } public void testNextBytes() { Random r = new Random(1); byte[] b = new byte[5]; r.nextBytes(b); assertEquals((byte) 115, b[0]); assertEquals((byte) -43, b[1]); assertEquals((byte) 26, b[2]); assertEquals((byte) -69, b[3]); assertEquals((byte) -40, b[4]); try { r.nextBytes(null); fail("Expected NullPointerException"); } catch (NullPointerException e) { } } public void testNextDouble() { Random r = new Random(1); assertEquals(0.7308781907032909, r.nextDouble()); assertEquals(0.41008081149220166, r.nextDouble()); assertEquals(0.20771484130971707, r.nextDouble()); assertEquals(0.3327170559595112, r.nextDouble()); assertEquals(0.9677559094241207, r.nextDouble()); } public void testNextFloat() { Random r = new Random(1); assertEquals(0.7308782f, r.nextFloat()); assertEquals(0.100473166f, r.nextFloat()); assertEquals(0.4100808f, r.nextFloat()); assertEquals(0.40743977f, r.nextFloat()); assertEquals(0.2077148f, r.nextFloat()); } public void testNextGaussian() { Random r = new Random(1); assertEquals(1.561581040188955, r.nextGaussian()); assertEquals(-0.6081826070068602, r.nextGaussian()); assertEquals(-1.0912278829447088, r.nextGaussian()); assertEquals(-0.6245401364066232, r.nextGaussian()); assertEquals(-1.1182832102556484, r.nextGaussian()); } public void testNextInt() { Random r = new Random(1); assertEquals(-1155869325, r.nextInt()); assertEquals(431529176, r.nextInt()); assertEquals(1761283695, r.nextInt()); assertEquals(1749940626, r.nextInt()); assertEquals(892128508, r.nextInt()); try { r.nextInt(0); fail("Expected IlledgalArgumentException"); } catch (IllegalArgumentException e) { } try { r.nextInt(-1); fail("Expected IlledgalArgumentException"); } catch (IllegalArgumentException e) { } } public void testNextInt100() { Random r = new Random(1); assertEquals(85, r.nextInt(100)); assertEquals(88, r.nextInt(100)); assertEquals(47, r.nextInt(100)); assertEquals(13, r.nextInt(100)); assertEquals(54, r.nextInt(100)); } public void testNextInt128() { Random r = new Random(1); assertEquals(93, r.nextInt(128)); assertEquals(12, r.nextInt(128)); assertEquals(52, r.nextInt(128)); assertEquals(52, r.nextInt(128)); assertEquals(26, r.nextInt(128)); } public void testNextLong() { Random r = new Random(1); assertEquals(-4964420948893066024L, r.nextLong()); assertEquals(7564655870752979346L, r.nextLong()); assertEquals(3831662765844904176L, r.nextLong()); assertEquals(6137546356583794141L, r.nextLong()); assertEquals(-594798593157429144L, r.nextLong()); } public void testSetSeed() { Random r = new Random(); r.setSeed(1); byte[] b = new byte[1]; r.nextBytes(b); assertEquals((byte) 115, b[0]); r.setSeed(1); assertEquals(0.7308781907032909, r.nextDouble()); r.setSeed(1); assertEquals(0.7308782f, r.nextFloat()); r.setSeed(1); assertEquals(1.561581040188955, r.nextGaussian()); r.setSeed(1); assertEquals(-1155869325, r.nextInt()); r.setSeed(1); assertEquals(85, r.nextInt(100)); r.setSeed(1); assertEquals(93, r.nextInt(128)); r.setSeed(1); assertEquals(-4964420948893066024L, r.nextLong()); } }