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/03 10:38:12 UTC
[commons-rng] branch master updated: Add stress test option to
combine bits with a system identity hash code.
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 0bda14c Add stress test option to combine bits with a system identity hash code.
0bda14c is described below
commit 0bda14cc5fc04155f8d1d2c4eeb8d1e1dd6160a3
Author: aherbert <ah...@apache.org>
AuthorDate: Mon Jun 3 11:38:09 2019 +0100
Add stress test option to combine bits with a system identity hash code.
---
.../commons/rng/examples/stress/RNGUtils.java | 28 ++++++++++++++++++++++
.../rng/examples/stress/StressTestCommand.java | 16 ++++++++++++-
2 files changed, 43 insertions(+), 1 deletion(-)
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 aac26fb..a7f77d5 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
@@ -79,6 +79,34 @@ final class RNGUtils {
}
/**
+ * Wrap the random generator with an {@link IntProvider} that will combine the bits
+ * using a {@code xor} operation with a generated hash code.
+ *
+ * <pre>{@code
+ * System.identityHashCode(new Object()) ^ rng.nextInt()
+ * }</pre>
+ *
+ * Note: This generator will be slow.
+ *
+ * @param rng The random generator.
+ * @return the hash code combined random generator.
+ * @see System#identityHashCode(Object)
+ */
+ static UniformRandomProvider createHashCodeIntProvider(final UniformRandomProvider rng) {
+ return new IntProvider() {
+ @Override
+ public int next() {
+ return System.identityHashCode(new Object()) ^ rng.nextInt();
+ }
+
+ @Override
+ public String toString() {
+ return "HashCode ^ " + rng.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 016d3a4..a34721e 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
@@ -121,13 +121,24 @@ class StressTestCommand implements Callable<Void> {
"Valid values: BIG_ENDIAN, LITTLE_ENDIAN."})
private ByteOrder byteOrder = ByteOrder.nativeOrder();
- /** The output byte order of the binary data. */
+ /** Flag to indicate the output should be bit-reversed. */
@Option(names = {"-r", "--reverse-bits"},
description = {"Reverse the bits in the data (default: ${DEFAULT-VALUE}).",
"Note: Generators may fail tests for a reverse sequence " +
"when passing using the standard sequence."})
private boolean reverseBits;
+ /**
+ * Flag to indicate the output should be combined with a hashcode from a new object.
+ * This is a method used in the {@link org.apache.commons.rng.simple.internal.SeedFactory SeedFactory}.
+ *
+ * @see System#identityHashCode(Object)
+ */
+ @Option(names = {"--hashcode"},
+ description = {"Combine the bits with a hashcode (default: ${DEFAULT-VALUE}).",
+ "System.identityHashCode(new Object()) ^ rng.nextInt()."})
+ private boolean xorHashCode;
+
/** The flag to indicate a dry run. */
@Option(names = {"--dry-run"},
description = "Perform a dry run where the generators and output files are created " +
@@ -397,6 +408,9 @@ class StressTestCommand implements Callable<Void> {
if (reverseBits) {
rng = RNGUtils.createReverseBitsIntProvider(rng);
}
+ if (xorHashCode) {
+ rng = RNGUtils.createHashCodeIntProvider(rng);
+ }
// Run the test
final Runnable r = new StressTestTask(testData.getRandomSource(), rng, output, command,
this, progressTracker);