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/02/14 13:59:27 UTC

[commons-rng] 04/17: RNG-67: Instructions for how to build and run the examples-stress 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

commit 9f54e579197a9c937110aff7df43dcbcd65375f5
Author: aherbert <a....@sussex.ac.uk>
AuthorDate: Tue Jan 29 10:24:09 2019 +0000

    RNG-67: Instructions for how to build and run the examples-stress code
---
 commons-rng-examples/examples-stress/pom.xml       | 45 +++++++++++++
 .../rng/examples/stress/IntGeneratorsList.java     | 49 ++++++++++++++
 .../rng/examples/stress/LongGeneratorsList.java    | 49 ++++++++++++++
 .../examples-stress/stress_test.md                 | 76 ++++++++++++++++++++++
 4 files changed, 219 insertions(+)

diff --git a/commons-rng-examples/examples-stress/pom.xml b/commons-rng-examples/examples-stress/pom.xml
index a7cf345..ef2bae2 100644
--- a/commons-rng-examples/examples-stress/pom.xml
+++ b/commons-rng-examples/examples-stress/pom.xml
@@ -45,6 +45,9 @@
     <commons.automatic.module.name>org.apache.commons.rng.examples.stress</commons.automatic.module.name>
     <!-- Workaround to avoid duplicating config files. -->
     <rng.parent.dir>${basedir}/../..</rng.parent.dir>
+
+    <uberjar.name>examples-stress</uberjar.name>
+    <project.mainClass>org.apache.commons.rng.examples.stress.RandomStressTester</project.mainClass>
   </properties>
 
   <dependencies>
@@ -59,4 +62,46 @@
     </dependency>
   </dependencies>
 
+  <profiles>
+    <profile>
+      <id>examples-stress</id>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-shade-plugin</artifactId>
+            <executions>
+              <execution>
+                <phase>package</phase>
+                <goals>
+                  <goal>shade</goal>
+                </goals>
+                <configuration>
+                  <finalName>${uberjar.name}</finalName>
+                  <transformers>
+                    <transformer
+                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                      <mainClass>${project.mainClass}</mainClass>
+                    </transformer>
+                  </transformers>
+                  <filters>
+                    <filter>
+                      <!-- Shading signed JARs will fail without this. http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar -->
+                      <artifact>*:*</artifact>
+                      <excludes>
+                        <exclude>META-INF/*.SF</exclude>
+                        <exclude>META-INF/*.DSA</exclude>
+                        <exclude>META-INF/*.RSA</exclude>
+                      </excludes>
+                    </filter>
+                  </filters>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
 </project>
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/IntGeneratorsList.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/IntGeneratorsList.java
new file mode 100644
index 0000000..72d15d1
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/IntGeneratorsList.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rng.examples.stress;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.core.source32.IntProvider;
+
+/**
+ * List of generators that use {@link IntProvider} as a base class.
+ */
+public class IntGeneratorsList implements Iterable<UniformRandomProvider> {
+    /** List of generators. */
+    private final List<UniformRandomProvider> list = new ArrayList<>();
+
+    /**
+     * Creates list.
+     */
+    public IntGeneratorsList() {
+        for (UniformRandomProvider rng : new GeneratorsList()) {
+            if (rng instanceof IntProvider) {
+                list.add(rng);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Iterator<UniformRandomProvider> iterator() {
+        return list.iterator();
+    }
+}
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/LongGeneratorsList.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/LongGeneratorsList.java
new file mode 100644
index 0000000..259b1bd
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/LongGeneratorsList.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.rng.examples.stress;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.apache.commons.rng.UniformRandomProvider;
+import org.apache.commons.rng.core.source64.LongProvider;
+
+/**
+ * List of generators that use {@link LongProvider} as a base class.
+ */
+public class LongGeneratorsList implements Iterable<UniformRandomProvider> {
+    /** List of generators. */
+    private final List<UniformRandomProvider> list = new ArrayList<>();
+
+    /**
+     * Creates list.
+     */
+    public LongGeneratorsList() {
+        for (UniformRandomProvider rng : new GeneratorsList()) {
+            if (rng instanceof LongProvider) {
+                list.add(rng);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Iterator<UniformRandomProvider> iterator() {
+        return list.iterator();
+    }
+}
diff --git a/commons-rng-examples/examples-stress/stress_test.md b/commons-rng-examples/examples-stress/stress_test.md
new file mode 100644
index 0000000..081ff8b
--- /dev/null
+++ b/commons-rng-examples/examples-stress/stress_test.md
@@ -0,0 +1,76 @@
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+Apache Commons RNG Stress Test Example
+===================
+
+The stress test module contains an application for calling external tools that perform stringent
+uniformity tests. The following shows an example of how to run DieHarder and TestU01.
+
+Installation on Linux
+---------------------
+
+This assumes that the source code has been checked out and the current working directory is
+`commons-rng-examples/examples-stress`.
+
+### TestU01
+
+This can be installed from [Test01](http://simul.iro.umontreal.ca/testu01/tu01.html) or using
+the available packages:
+
+        > apt-get install libtestu01 libtestu01-dev testu01-bin
+
+A simple bridge is provided to read the integers from `stdin` and pass them to the TestU01 library.
+This can be compiled using:
+
+        > gcc src/main/c/stdin2testu01.c -o stdin2testu01 -ltestu01 -lprobdist -lmylib -lm
+
+### DieHarder
+
+This can be install from [DieHarder](http://webhome.phy.duke.edu/~rgb/General/dieharder.php) or
+using the available package:
+
+        > apt-get install dieharder
+
+The `dieharder` executable can read integers from `stdin` for analysis.
+
+Running on Linux
+----------------
+
+Build the `examples-stress` jar file:
+
+        > mvn package -P examples-stress
+
+This will create a single jar file with all the dependencies in the `target` directory.
+
+The jar file requires the following arguments:
+
+| Argument  | Description | Example |
+| --------- | ----------- | ------- |
+| path | Output filename prefix | target/dh_ |
+| n | Number of processors | 4 |
+| GeneratorsList class | Fully qualified class name of a provider for the supported random generators | org.apache.commons.rng.examples.stress.(GeneratorsList/IntGeneratorsList/LongGeneratorsList) |
+| executable | The test tool | dieharder, stdin2testu01 |
+| ... | Arguments for the test tool | dieharder: -a -g 200 -Y 1 -k 2, stdin2testu01: SmallCrush, Crush, BigCrush |
+
+### TestU01
+
+        > java -jar target/examples-stress.jar target/tu_ 4 org.apache.commons.rng.examples.stress.GeneratorsList ./stdin2testu01 BigCrush
+
+### DieHarder
+
+        > java -jar target/examples-stress.jar target/dh_ 4 org.apache.commons.rng.examples.stress.GeneratorsList /usr/bin/dieharder -a -g 200 -Y 1 -k 2