diff --git a/prngine/src/main/java/io/jenetics/prngine/KISS32Random.java b/prngine/src/main/java/io/jenetics/prngine/KISS32Random.java index 3a220fc..a405470 100644 --- a/prngine/src/main/java/io/jenetics/prngine/KISS32Random.java +++ b/prngine/src/main/java/io/jenetics/prngine/KISS32Random.java @@ -340,7 +340,7 @@ public void setSeed(final byte[] seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { setSeed(PRNG.seedBytes(seed, SEED_BYTES)); } diff --git a/prngine/src/main/java/io/jenetics/prngine/KISS64Random.java b/prngine/src/main/java/io/jenetics/prngine/KISS64Random.java index f0e9107..0fb784b 100644 --- a/prngine/src/main/java/io/jenetics/prngine/KISS64Random.java +++ b/prngine/src/main/java/io/jenetics/prngine/KISS64Random.java @@ -226,8 +226,8 @@ void setSeed(final byte[] seed) { @Override public int hashCode() { int hash = 31; - hash += 37*_x + 17; - hash += 37*_y + 17; + hash += 37*Long.hashCode(_x) + 17; + hash += 37*Long.hashCode(_y) + 17; hash += 37*_z1 + 17; hash += 37*_c1 + 17; hash += 37*_z2 + 17; @@ -350,7 +350,7 @@ public void setSeed(final byte[] seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { setSeed(PRNG.seedBytes(seed, SEED_BYTES)); } diff --git a/prngine/src/main/java/io/jenetics/prngine/LCG64ShiftRandom.java b/prngine/src/main/java/io/jenetics/prngine/LCG64ShiftRandom.java index 750ea92..16090c6 100644 --- a/prngine/src/main/java/io/jenetics/prngine/LCG64ShiftRandom.java +++ b/prngine/src/main/java/io/jenetics/prngine/LCG64ShiftRandom.java @@ -521,7 +521,7 @@ public void setSeed(final byte[] seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { setSeed(PRNG.seedBytes(seed, SEED_BYTES)); } diff --git a/prngine/src/main/java/io/jenetics/prngine/MT19937_32Random.java b/prngine/src/main/java/io/jenetics/prngine/MT19937_32Random.java index 63ecda3..c763c6e 100644 --- a/prngine/src/main/java/io/jenetics/prngine/MT19937_32Random.java +++ b/prngine/src/main/java/io/jenetics/prngine/MT19937_32Random.java @@ -90,7 +90,7 @@ private TLRandom(final long seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_sentry != null) { throw new UnsupportedOperationException( "The 'setSeed(long)' method is not supported " + @@ -328,7 +328,7 @@ public void setSeed(final byte[] seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_state != null) _state.setSeed(seed); } diff --git a/prngine/src/main/java/io/jenetics/prngine/MT19937_64Random.java b/prngine/src/main/java/io/jenetics/prngine/MT19937_64Random.java index 9526d07..9a556fc 100644 --- a/prngine/src/main/java/io/jenetics/prngine/MT19937_64Random.java +++ b/prngine/src/main/java/io/jenetics/prngine/MT19937_64Random.java @@ -91,7 +91,7 @@ private TLRandom(final long seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_sentry != null) { throw new UnsupportedOperationException( "The 'setSeed(long)' method is not supported " + @@ -331,7 +331,7 @@ public void setSeed(final byte[] seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_state != null) _state.setSeed(seed); } diff --git a/prngine/src/main/java/io/jenetics/prngine/PRNG.java b/prngine/src/main/java/io/jenetics/prngine/PRNG.java index 103ffb7..267e491 100644 --- a/prngine/src/main/java/io/jenetics/prngine/PRNG.java +++ b/prngine/src/main/java/io/jenetics/prngine/PRNG.java @@ -186,20 +186,15 @@ public static int nextInt( } final int value; - - if (origin < bound) { - int n = bound - origin; - if (n > 0) { - value = random.nextInt(n) + origin; - } else { - int r; - do { - r = random.nextInt(); - } while (r < origin || r >= bound); - value = r; - } + int n = bound - origin; + if (n > 0) { + value = random.nextInt(n) + origin; } else { - value = random.nextInt(); + int r; + do { + r = random.nextInt(); + } while (r < origin || r >= bound); + value = r; } return value; @@ -230,22 +225,20 @@ public static long nextLong( } long value = random.nextLong(); - if (origin < bound) { - long n = bound - origin, m = n - 1; - if ((n & m) == 0L) { - value = (value & m) + origin; - } else if (n > 0L) { - for (long u = value >>> 1; - u + m - (value = u % n) < 0L; - u = random.nextLong() >>> 1) - { - } - - value += origin; - } else { - while (value < origin || value >= bound) { - value = random.nextLong(); - } + long n = bound - origin, m = n - 1; + if ((n & m) == 0L) { + value = (value & m) + origin; + } else if (n > 0L) { + for (long u = value >>> 1; + u + m - (value = u % n) < 0L; + u = random.nextLong() >>> 1) + { + } + + value += origin; + } else { + while (value < origin || value >= bound) { + value = random.nextLong(); } } diff --git a/prngine/src/main/java/io/jenetics/prngine/Random32.java b/prngine/src/main/java/io/jenetics/prngine/Random32.java index 65dfa79..bf79e55 100644 --- a/prngine/src/main/java/io/jenetics/prngine/Random32.java +++ b/prngine/src/main/java/io/jenetics/prngine/Random32.java @@ -124,7 +124,7 @@ public int nextInt() { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_sentry != null) { throw new UnsupportedOperationException( "The 'setSeed(long)' method is not supported." diff --git a/prngine/src/main/java/io/jenetics/prngine/Random64.java b/prngine/src/main/java/io/jenetics/prngine/Random64.java index b01cdba..69b149a 100644 --- a/prngine/src/main/java/io/jenetics/prngine/Random64.java +++ b/prngine/src/main/java/io/jenetics/prngine/Random64.java @@ -137,7 +137,7 @@ public long nextLong() { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { if (_sentry != null) { throw new UnsupportedOperationException( "The 'setSeed(long)' method is not supported." diff --git a/prngine/src/main/java/io/jenetics/prngine/XOR32ShiftRandom.java b/prngine/src/main/java/io/jenetics/prngine/XOR32ShiftRandom.java index 1c6cd1c..ecbff78 100644 --- a/prngine/src/main/java/io/jenetics/prngine/XOR32ShiftRandom.java +++ b/prngine/src/main/java/io/jenetics/prngine/XOR32ShiftRandom.java @@ -89,7 +89,8 @@ public static enum Shift { public int shift(int x, final Param param) { x ^= x << param.a; x ^= x >>> param.b; - return x^x << param.c; + x ^= x << param.c; + return x ; } }, @@ -108,7 +109,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x << param.c; x ^= x >>> param.b; - return x^x << param.a; + x ^= x << param.a; + return x; } }, @@ -127,7 +129,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x >>> param.a; x ^= x << param.b; - return x^x >>> param.c; + x ^= x >>> param.c; + return x; } }, @@ -146,7 +149,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x >>> param.c; x ^= x << param.b; - return x^x >>> param.a; + x ^= x >>> param.a; + return x; } }, @@ -165,7 +169,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x << param.a; x ^= x << param.c; - return x^x >>> param.b; + x ^= x >>> param.b; + return x; } }, @@ -184,7 +189,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x << param.c; x ^= x << param.a; - return x^x >>> param.b; + x ^= x >>> param.b; + return x; } }, @@ -203,7 +209,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x >>> param.a; x ^= x >>> param.c; - return x^x << param.b; + x ^= x << param.b; + return x; } }, @@ -222,7 +229,8 @@ public int shift(int x, final Param param) { public int shift(int x, final Param param) { x ^= x >>> param.c; x ^= x >>> param.a; - return x^x << param.b; + x ^= x << param.b; + return x; } }; @@ -710,7 +718,7 @@ private static int toSafeSeed(final int seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { _x = toSafeSeed((int)seed); } diff --git a/prngine/src/main/java/io/jenetics/prngine/XOR64ShiftRandom.java b/prngine/src/main/java/io/jenetics/prngine/XOR64ShiftRandom.java index 7b7ded5..75b38fd 100644 --- a/prngine/src/main/java/io/jenetics/prngine/XOR64ShiftRandom.java +++ b/prngine/src/main/java/io/jenetics/prngine/XOR64ShiftRandom.java @@ -89,7 +89,8 @@ public static enum Shift { public long shift(long x, final Param param) { x ^= x << param.a; x ^= x >>> param.b; - return x^x << param.c; + x ^= x << param.c; + return x; } }, @@ -108,7 +109,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x << param.c; x ^= x >>> param.b; - return x^x << param.a; + x ^= x << param.a; + return x; } }, @@ -127,7 +129,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x >>> param.a; x ^= x << param.b; - return x^x >>> param.c; + x ^= x >>> param.c; + return x; } }, @@ -146,7 +149,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x >>> param.c; x ^= x << param.b; - return x^x >>> param.a; + x ^= x >>> param.a; + return x; } }, @@ -165,7 +169,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x << param.a; x ^= x << param.c; - return x^x >>> param.b; + x ^= x >>> param.b; + return x; } }, @@ -184,7 +189,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x << param.c; x ^= x << param.a; - return x^x >>> param.b; + x ^= x >>> param.b; + return x; } }, @@ -203,7 +209,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x >>> param.a; x ^= x >>> param.c; - return x^x << param.b; + x ^= x << param.b; + return x; } }, @@ -222,7 +229,8 @@ public long shift(long x, final Param param) { public long shift(long x, final Param param) { x ^= x >>> param.c; x ^= x >>> param.a; - return x^x << param.b; + x ^= x << param.b; + return x; } }; @@ -830,7 +838,7 @@ private static long toSafeSeed(final long seed) { } @Override - public void setSeed(final long seed) { + public synchronized void setSeed(final long seed) { _x = toSafeSeed((int)seed); } @@ -847,7 +855,7 @@ public String toString() { @Override public int hashCode() { int hash = 31; - hash += 17*_x + 37; + hash += 17*Long.hashCode(_x) + 37; hash += 17*_param.hashCode() + 37; return hash; diff --git a/prngine/src/main/java/io/jenetics/prngine/internal/DieHarder.java b/prngine/src/main/java/io/jenetics/prngine/internal/DieHarder.java index cd5b4d3..e28c6d6 100644 --- a/prngine/src/main/java/io/jenetics/prngine/internal/DieHarder.java +++ b/prngine/src/main/java/io/jenetics/prngine/internal/DieHarder.java @@ -27,6 +27,7 @@ import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; @@ -124,14 +125,15 @@ public static List test( randomizerThread.start(); // The dieharder console output. - final BufferedReader stdout = new BufferedReader ( - new InputStreamReader(dieharder.getInputStream()) - ); - final List results = new ArrayList<>(); - for (String l = stdout.readLine(); l != null; l = stdout.readLine()) { - Result.parse(l).ifPresent(results::add); - System.out.println(l); + try (InputStream is = dieharder.getInputStream(); + InputStreamReader ir = new InputStreamReader(is); + BufferedReader stdout = new BufferedReader(ir)) + { + for (String l = stdout.readLine(); l != null; l = stdout.readLine()) { + Result.parse(l).ifPresent(results::add); + System.out.println(l); + } } dieharder.waitFor();