This is an automated email from the ASF dual-hosted git repository. aherbert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-rng.git
commit 45bb52996ebc089cfdadb0bf32c2eb4a5419bc7c Author: aherbert <aherb...@apache.org> AuthorDate: Mon Aug 5 16:20:39 2019 +0100 RNG-85: Allow primitive types to correctly seed the MSWS --- .../rng/simple/internal/ProviderBuilder.java | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java index 0487b82..00e6524 100644 --- a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java +++ b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java @@ -253,8 +253,30 @@ public final class ProviderBuilder { NativeSeedType.LONG_ARRAY) { @Override Object createSeed() { - // This generator requires a high quality Weyl increment. - final long seed = SeedFactory.createLong(); + return createMswsSeed(SeedFactory.createLong()); + } + + @Override + Object convertSeed(Object seed) { + // Allow seeding with primitives to generate a good seed + if (seed instanceof Integer) { + return createMswsSeed((Integer) seed); + } else if (seed instanceof Long) { + return createMswsSeed((Long) seed); + } + // Other types (e.g. the native long[]) are handled by the default conversion + return super.convertSeed(seed); + } + + /** + * Creates the full length seed array from the input seed using the method + * recommended for the generator. This is a high quality Weyl increment composed + * of a hex character permutation. + * + * @param seed the seed + * @return the seed array + */ + private long[] createMswsSeed(long seed) { final long increment = SeedUtils.createLongHexPermutation(new SplitMix64(seed)); // The initial state should not be low complexity but the Weyl // state can be any number.