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 19b7bde700e6c652e4425c8edbbc5e9ecf1c0a64 Author: aherbert <[email protected]> AuthorDate: Fri Sep 27 12:13:28 2019 +0100 RNG-118: RandomSource values for XoRoShiRo PlusPlus generators. XO_SHI_RO_128_PP XO_RO_SHI_RO_128_PP XO_SHI_RO_256_PP XO_SHI_RO_512_PP XO_RO_SHI_RO_1024_PP XO_RO_SHI_RO_1024_S XO_RO_SHI_RO_1024_SS --- .../commons/rng/examples/jmh/BaselineSources.java | 7 +++ .../rng/examples/jmh/RandomSourceValues.java | 7 +++ .../apache/commons/rng/simple/RandomSource.java | 58 +++++++++++++++++++++- .../rng/simple/internal/ProviderBuilder.java | 37 +++++++++++++- .../apache/commons/rng/simple/ProvidersList.java | 7 +++ .../RandomSourceInternalParametricTest.java | 7 +++ 6 files changed, 121 insertions(+), 2 deletions(-) diff --git a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/BaselineSources.java b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/BaselineSources.java index 7961594..0c754fc 100644 --- a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/BaselineSources.java +++ b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/BaselineSources.java @@ -97,6 +97,13 @@ public abstract class BaselineSources { "SFC_64", "JSF_32", "JSF_64", + "XO_SHI_RO_128_PP", + "XO_RO_SHI_RO_128_PP", + "XO_SHI_RO_256_PP", + "XO_SHI_RO_512_PP", + "XO_RO_SHI_RO_1024_PP", + "XO_RO_SHI_RO_1024_S", + "XO_RO_SHI_RO_1024_SS", }) private String randomSourceName; diff --git a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/RandomSourceValues.java b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/RandomSourceValues.java index db643e5..2926bd7 100644 --- a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/RandomSourceValues.java +++ b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/RandomSourceValues.java @@ -75,6 +75,13 @@ public class RandomSourceValues { "SFC_64", "JSF_32", "JSF_64", + "XO_SHI_RO_128_PP", + "XO_RO_SHI_RO_128_PP", + "XO_SHI_RO_256_PP", + "XO_SHI_RO_512_PP", + "XO_RO_SHI_RO_1024_PP", + "XO_RO_SHI_RO_1024_S", + "XO_RO_SHI_RO_1024_SS", }) private String randomSourceName; diff --git a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/RandomSource.java b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/RandomSource.java index b98f060..33674b4 100644 --- a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/RandomSource.java +++ b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/RandomSource.java @@ -458,7 +458,63 @@ public enum RandomSource { * <li>Native seed type: {@code Long}.</li> * </ul> */ - JSF_64(ProviderBuilder.RandomSourceInternal.JSF_64); + JSF_64(ProviderBuilder.RandomSourceInternal.JSF_64), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source32.XoShiRo128PlusPlus}. + * <ul> + * <li>Native seed type: {@code int[]}.</li> + * <li>Native seed size: 4.</li> + * </ul> + */ + XO_SHI_RO_128_PP(ProviderBuilder.RandomSourceInternal.XO_SHI_RO_128_PP), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoRoShiRo128PlusPlus}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 2.</li> + * </ul> + */ + XO_RO_SHI_RO_128_PP(ProviderBuilder.RandomSourceInternal.XO_RO_SHI_RO_128_PP), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoShiRo256PlusPlus}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 4.</li> + * </ul> + */ + XO_SHI_RO_256_PP(ProviderBuilder.RandomSourceInternal.XO_SHI_RO_256_PP), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoShiRo512PlusPlus}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 8.</li> + * </ul> + */ + XO_SHI_RO_512_PP(ProviderBuilder.RandomSourceInternal.XO_SHI_RO_512_PP), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoRoShiRo1024PlusPlus}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 16.</li> + * </ul> + */ + XO_RO_SHI_RO_1024_PP(ProviderBuilder.RandomSourceInternal.XO_RO_SHI_RO_1024_PP), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoRoShiRo1024Star}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 16.</li> + * </ul> + */ + XO_RO_SHI_RO_1024_S(ProviderBuilder.RandomSourceInternal.XO_RO_SHI_RO_1024_S), + /** + * Source of randomness is {@link org.apache.commons.rng.core.source64.XoRoShiRo1024StarStar}. + * <ul> + * <li>Native seed type: {@code long[]}.</li> + * <li>Native seed size: 16.</li> + * </ul> + */ + XO_RO_SHI_RO_1024_SS(ProviderBuilder.RandomSourceInternal.XO_RO_SHI_RO_1024_SS); /** Internal identifier. */ private final ProviderBuilder.RandomSourceInternal internalIdentifier; 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 1739ea5..4c6f0ef 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 @@ -37,6 +37,7 @@ import org.apache.commons.rng.core.source32.KISSRandom; import org.apache.commons.rng.core.source32.XoRoShiRo64Star; import org.apache.commons.rng.core.source32.XoRoShiRo64StarStar; import org.apache.commons.rng.core.source32.XoShiRo128Plus; +import org.apache.commons.rng.core.source32.XoShiRo128PlusPlus; import org.apache.commons.rng.core.source32.XoShiRo128StarStar; import org.apache.commons.rng.core.source32.PcgXshRr32; import org.apache.commons.rng.core.source32.PcgXshRs32; @@ -48,12 +49,18 @@ import org.apache.commons.rng.core.source64.SplitMix64; import org.apache.commons.rng.core.source64.XorShift1024Star; import org.apache.commons.rng.core.source64.XorShift1024StarPhi; import org.apache.commons.rng.core.source64.TwoCmres; +import org.apache.commons.rng.core.source64.XoRoShiRo1024PlusPlus; +import org.apache.commons.rng.core.source64.XoRoShiRo1024Star; +import org.apache.commons.rng.core.source64.XoRoShiRo1024StarStar; import org.apache.commons.rng.core.source64.MersenneTwister64; import org.apache.commons.rng.core.source64.XoRoShiRo128Plus; +import org.apache.commons.rng.core.source64.XoRoShiRo128PlusPlus; import org.apache.commons.rng.core.source64.XoRoShiRo128StarStar; import org.apache.commons.rng.core.source64.XoShiRo256Plus; +import org.apache.commons.rng.core.source64.XoShiRo256PlusPlus; import org.apache.commons.rng.core.source64.XoShiRo256StarStar; import org.apache.commons.rng.core.source64.XoShiRo512Plus; +import org.apache.commons.rng.core.source64.XoShiRo512PlusPlus; import org.apache.commons.rng.core.source64.XoShiRo512StarStar; import org.apache.commons.rng.core.source64.PcgRxsMXs64; import org.apache.commons.rng.core.source64.DotyHumphreySmallFastCounting64; @@ -319,7 +326,35 @@ public final class ProviderBuilder { /** Source of randomness is {@link JenkinsSmallFast64}. */ JSF_64(JenkinsSmallFast64.class, 1, - NativeSeedType.LONG); + NativeSeedType.LONG), + /** Source of randomness is {@link XoShiRo128PlusPlus}. */ + XO_SHI_RO_128_PP(XoShiRo128PlusPlus.class, + 4, + NativeSeedType.INT_ARRAY), + /** Source of randomness is {@link XoRoShiRo128PlusPlus}. */ + XO_RO_SHI_RO_128_PP(XoRoShiRo128PlusPlus.class, + 2, + NativeSeedType.LONG_ARRAY), + /** Source of randomness is {@link XoShiRo256PlusPlus}. */ + XO_SHI_RO_256_PP(XoShiRo256PlusPlus.class, + 4, + NativeSeedType.LONG_ARRAY), + /** Source of randomness is {@link XoShiRo512PlusPlus}. */ + XO_SHI_RO_512_PP(XoShiRo512PlusPlus.class, + 8, + NativeSeedType.LONG_ARRAY), + /** Source of randomness is {@link XoRoShiRo1024PlusPlus}. */ + XO_RO_SHI_RO_1024_PP(XoRoShiRo1024PlusPlus.class, + 16, + NativeSeedType.LONG_ARRAY), + /** Source of randomness is {@link XoRoShiRo1024Star}. */ + XO_RO_SHI_RO_1024_S(XoRoShiRo1024Star.class, + 16, + NativeSeedType.LONG_ARRAY), + /** Source of randomness is {@link XoRoShiRo1024StarStar}. */ + XO_RO_SHI_RO_1024_SS(XoRoShiRo1024StarStar.class, + 16, + NativeSeedType.LONG_ARRAY); /** Source type. */ private final Class<? extends UniformRandomProvider> rng; diff --git a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/ProvidersList.java b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/ProvidersList.java index 3cc655d..26c87cb 100644 --- a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/ProvidersList.java +++ b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/ProvidersList.java @@ -64,6 +64,7 @@ public final class ProvidersList { // it will not output random data. add(LIST32, RandomSource.MSWS, new long[] {687233648L, 678656564562300L, 0xb5ad4eceda1ce2a9L}); add(LIST32, RandomSource.SFC_32, new int[] {-23574234, 7654343}); + add(LIST32, RandomSource.XO_SHI_RO_128_PP, new int[] {8796823, -3244890, -263842}); // ... add more here. // "long"-based RNGs. @@ -81,6 +82,12 @@ public final class ProvidersList { add(LIST64, RandomSource.XO_SHI_RO_512_SS, new long[] {123L, -654654L, 45646789L}); add(LIST64, RandomSource.PCG_RXS_M_XS_64, new long[] {42088L, 69271L}); add(LIST64, RandomSource.SFC_64, new long[] {-2357423478979842L, 76543434515L}); + add(LIST64, RandomSource.XO_RO_SHI_RO_128_PP, new long[] {789741321465L, -461321684612L, -12301654794L}); + add(LIST64, RandomSource.XO_SHI_RO_256_PP, new long[] {2374243L, -8097397345383L, -223479293943L}); + add(LIST64, RandomSource.XO_SHI_RO_512_PP, new long[] {-1210684761321465L, -485132198745L, 89942134798523L}); + add(LIST64, RandomSource.XO_RO_SHI_RO_1024_PP, new long[] {236424345654L, 781544546164721L, -85235476312346L}); + add(LIST64, RandomSource.XO_RO_SHI_RO_1024_S, new long[] {-1574314L, 7879874453221215L, -7894343883216L}); + add(LIST64, RandomSource.XO_RO_SHI_RO_1024_SS, new long[] {-41514541234654321L, -12146412316546L, 7984134134L}); // ... add more here. // Do not modify the remaining statements. diff --git a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/RandomSourceInternalParametricTest.java b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/RandomSourceInternalParametricTest.java index e58f4ff..737b73c 100644 --- a/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/RandomSourceInternalParametricTest.java +++ b/commons-rng-simple/src/test/java/org/apache/commons/rng/simple/internal/RandomSourceInternalParametricTest.java @@ -90,6 +90,13 @@ public class RandomSourceInternalParametricTest { EXPECTED_SEED_BYTES.put(RandomSourceInternal.SFC_64, longBytes * 3); EXPECTED_SEED_BYTES.put(RandomSourceInternal.JSF_32, intBytes * 1); EXPECTED_SEED_BYTES.put(RandomSourceInternal.JSF_64, longBytes * 1); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_SHI_RO_128_PP, intBytes * 4); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_RO_SHI_RO_128_PP, longBytes * 2); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_SHI_RO_256_PP, longBytes * 4); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_SHI_RO_512_PP, longBytes * 8); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_RO_SHI_RO_1024_PP, longBytes * 16); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_RO_SHI_RO_1024_S, longBytes * 16); + EXPECTED_SEED_BYTES.put(RandomSourceInternal.XO_RO_SHI_RO_1024_SS, longBytes * 16); // ... add more here. // Verify the seed byte size is reflected in the enum javadoc for RandomSource. }
