You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/06/09 12:24:54 UTC
[commons-rng] branch master updated: Add option to combine primary
test generator with a second generator.
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
The following commit(s) were added to refs/heads/master by this push:
new be6c544 Add option to combine primary test generator with a second generator.
be6c544 is described below
commit be6c5448aed21bcbf0e415ee4e74a9ad62ff325d
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Sun Jun 9 13:24:37 2019 +0100
Add option to combine primary test generator with a second generator.
---
.../commons/rng/examples/stress/RNGUtils.java | 25 ++++++++++++++++++++++
.../rng/examples/stress/StressTestCommand.java | 14 ++++++++++++
2 files changed, 39 insertions(+)
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RNGUtils.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RNGUtils.java
index ab1ee17..d5d4f79 100644
--- a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RNGUtils.java
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RNGUtils.java
@@ -134,6 +134,31 @@ final class RNGUtils {
}
/**
+ * Combine the two random generators using a {@code xor} operations.
+ *
+ * <pre>{@code
+ * rng1.nextInt() ^ rng2.nextInt()
+ * }</pre>
+ *
+ * @param rng1 The first random generator.
+ * @param rng2 The second random generator.
+ * @return the combined random generator.
+ */
+ static UniformRandomProvider createXorIntProvider(final UniformRandomProvider rng1,
+ final UniformRandomProvider rng2) {
+ return new IntProvider() {
+ @Override
+ public int next() {
+ return rng1.nextInt() ^ rng2.nextInt();
+ }
+
+ @Override
+ public String toString() {
+ return rng1.toString() + " ^ " + rng2.toString();
+ }
+ };
+ }
+ /**
* Parses the argument into an object suitable for the RandomSource constructor. Supports:
*
* <ul>
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/StressTestCommand.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/StressTestCommand.java
index 0209e62..6bd2241 100644
--- a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/StressTestCommand.java
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/StressTestCommand.java
@@ -147,6 +147,15 @@ class StressTestCommand implements Callable<Void> {
"ThreadLocalRandom.current().nextInt() ^ rng.nextInt()."})
private boolean xorThreadLocalRandom;
+ /**
+ * Flag to indicate the output should be combined with output from a second generator.
+ */
+ @Option(names = {"--xor-rng"},
+ description = {"Combine the bits with a second generator.",
+ "xorRng.nextInt() ^ rng.nextInt().",
+ "Valid values: Any known RandomSource enum value."})
+ private RandomSource xorRandomSource;
+
/** The flag to indicate a dry run. */
@Option(names = {"--dry-run"},
description = "Perform a dry run where the generators and output files are created " +
@@ -417,6 +426,11 @@ class StressTestCommand implements Callable<Void> {
if (xorThreadLocalRandom) {
rng = RNGUtils.createThreadLocalRandomIntProvider(rng);
}
+ if (xorRandomSource != null) {
+ rng = RNGUtils.createXorIntProvider(
+ RandomSource.create(xorRandomSource),
+ rng);
+ }
if (reverseBits) {
rng = RNGUtils.createReverseBitsIntProvider(rng);
}