You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2018/02/13 22:27:00 UTC

[03/14] commons-rng git commit: Refactored code contents of module "commons-rng-examples" into sub-modules.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/examples-stress/src/main/c/stdin2testu01.c
----------------------------------------------------------------------
diff --git a/commons-rng-examples/examples-stress/src/main/c/stdin2testu01.c b/commons-rng-examples/examples-stress/src/main/c/stdin2testu01.c
new file mode 100644
index 0000000..d1a4a6a
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/c/stdin2testu01.c
@@ -0,0 +1,127 @@
+/*
+ * 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.
+ */
+
+/*
+ * Utility for simple interfacing with the "TestU01" library:
+ *  http://simul.iro.umontreal.ca/testu01/tu01.html
+ *
+ * It reads from its standard input an infinite sequence of 32-bits
+ * integers and runs one of the test suites "SmallCrush", "Crush" or
+ * "BigCrush".
+ * "TestU01" writes its report to standard output.
+ */
+
+#include <stdint.h>
+#include <unistd.h>
+#include <string.h>
+
+#include <testu01/unif01.h>
+#include <testu01/bbattery.h>
+#include <testu01/util.h>
+
+#define TU_S "SmallCrush"
+#define TU_C "Crush"
+#define TU_B "BigCrush"
+#define BUFFER_LENGTH 256
+
+typedef struct {
+  unsigned long buffer[BUFFER_LENGTH];
+  uint32_t index;
+} StdinReader_state;
+
+unsigned long nextInt(void *par,
+                      void *sta) {
+  StdinReader_state *state = (StdinReader_state *) sta;
+  if (state->index >= BUFFER_LENGTH) {
+    /* Refill. */
+    fread(state->buffer, sizeof(unsigned long), BUFFER_LENGTH, stdin);
+    state->index = 0;
+  }
+
+  uint32_t random = state->buffer[state->index];
+  ++state->index; /* Next request. */
+
+  return random;
+}
+
+double nextDouble(void *par,
+                  void *sta) {
+  return nextInt(par, sta) / 4294967296.0;
+}
+
+
+static void dummy(void *sta) {
+  printf("N/A");
+
+  return;
+}
+
+unif01_Gen *createStdinReader(void) {
+   unif01_Gen *gen;
+   StdinReader_state *state;
+   size_t len;
+   char name[60];
+
+   state = util_Malloc(sizeof(StdinReader_state));
+
+   gen = util_Malloc(sizeof(unif01_Gen));
+   gen->state = state;
+   gen->param = NULL;
+   gen->Write = dummy;
+   gen->GetU01 = nextDouble;
+   gen->GetBits = nextInt;
+
+   strcpy(name, "stdin");
+   len = strlen(name);
+   gen->name = util_Calloc(len + 1, sizeof (char));
+   strncpy(gen->name, name, len);
+
+   // Read binary input.
+   freopen(NULL, "rb", stdin);
+   state->index = BUFFER_LENGTH;
+
+   return gen;
+}
+
+void deleteStdinReader(unif01_Gen *gen) {
+   gen->state = util_Free(gen->state);
+   gen->name = util_Free(gen->name);
+   util_Free(gen);
+}
+
+int main(int argc,
+         char **argv) {
+  unif01_Gen *gen = createStdinReader();
+  char *spec = argv[1];
+
+  if (argc < 2) {
+    printf("[ERROR] Specify test suite: '%s', '%s' or '%s'\n", TU_S, TU_C, TU_B);
+    exit(1);
+  } else if (strcmp(spec, TU_S) == 0) {
+    bbattery_SmallCrush(gen);
+  } else if (strcmp(spec, TU_C) == 0) {
+    bbattery_Crush(gen);
+  } else if (strcmp(spec, TU_B) == 0) {
+    bbattery_BigCrush(gen);
+  } else {
+    printf("[ERROR] Unknown specification: '%s'\n", spec);
+    exit(1);
+  }
+
+  deleteStdinReader(gen);
+  return 0;
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
new file mode 100644
index 0000000..037f60b
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
@@ -0,0 +1,59 @@
+/*
+ * 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.simple.RandomSource;
+
+/**
+ * List of generators.
+ */
+public class GeneratorsList implements Iterable<UniformRandomProvider> {
+    /** List. */
+    private final List<UniformRandomProvider> list = new ArrayList<UniformRandomProvider>();
+
+    /**
+     * Creates list.
+     */
+    public GeneratorsList() {
+        list.add(RandomSource.create(RandomSource.JDK));
+        list.add(RandomSource.create(RandomSource.MT));
+        list.add(RandomSource.create(RandomSource.WELL_512_A));
+        list.add(RandomSource.create(RandomSource.WELL_1024_A));
+        list.add(RandomSource.create(RandomSource.WELL_19937_A));
+        list.add(RandomSource.create(RandomSource.WELL_19937_C));
+        list.add(RandomSource.create(RandomSource.WELL_44497_A));
+        list.add(RandomSource.create(RandomSource.WELL_44497_B));
+        list.add(RandomSource.create(RandomSource.ISAAC));
+        list.add(RandomSource.create(RandomSource.MT_64));
+        list.add(RandomSource.create(RandomSource.SPLIT_MIX_64));
+        list.add(RandomSource.create(RandomSource.XOR_SHIFT_1024_S));
+        list.add(RandomSource.create(RandomSource.TWO_CMRES));
+        list.add(RandomSource.create(RandomSource.MWC_256));
+        list.add(RandomSource.create(RandomSource.KISS));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public Iterator<UniformRandomProvider> iterator() {
+        return list.iterator();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
new file mode 100644
index 0000000..1cad0dd
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
@@ -0,0 +1,292 @@
+/*
+ * 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.Arrays;
+import java.io.IOException;
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.FileWriter;
+import java.io.DataOutputStream;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+import org.apache.commons.rng.UniformRandomProvider;
+
+/**
+ * Class that can be used for testing a generator by piping the values
+ * returned by its {@link UniformRandomProvider#nextInt()} method to a
+ * program that reads {@code int} values from its standard input and
+ * writes an analysis report to standard output.
+ *
+ * The <a href="http://www.phy.duke.edu/~rgb/General/dieharder.php">
+ * "dieharder"</a> test suite is such a software.
+ *
+ * Example of command line, assuming that "examples.jar" specifies this
+ * class as the "main" class (see {@link #main(String[]) main} method):
+ * <pre><code>
+ *  $ java -jar examples.jar \
+ *    report/dh_ \
+ *    4 \
+ *    org.apache.commons.rng.examples.stress.GeneratorsList \
+ *    /usr/bin/dieharder -a -g 200 -Y 1 -k 2
+ * </code></pre>
+ */
+public class RandomStressTester {
+    /** Comment prefix. */
+    private static final String C = "# ";
+    /** New line. */
+    private static final String N = "\n";
+    /** Command line. */
+    private final List<String> cmdLine;
+    /** Output prefix. */
+    private final String fileOutputPrefix;
+
+    /**
+     * Creates the application.
+     *
+     * @param cmd Command line.
+     * @param outputPrefix Output prefix for file reports.
+     */
+    private RandomStressTester(List<String> cmd,
+                               String outputPrefix) {
+        final File exec = new File(cmd.get(0));
+        if (!exec.exists() ||
+            !exec.canExecute()) {
+            throw new IllegalArgumentException("Program is not executable: " + exec);
+        }
+
+        cmdLine = new ArrayList<String>(cmd);
+        fileOutputPrefix = outputPrefix;
+
+        final File reportDir = new File(fileOutputPrefix).getParentFile();
+        if (!reportDir.exists() ||
+            !reportDir.isDirectory() ||
+            !reportDir.canWrite()) {
+            throw new IllegalArgumentException("Invalid output directory: " + reportDir);
+        }
+    }
+
+    /**
+     * Program's entry point.
+     *
+     * @param args Application's arguments.
+     * The order is as follows:
+     * <ol>
+     *  <li>Output prefix: Filename prefix where the output of the analysis will
+     *   written to.  The appended suffix is the index of the instance within the
+     *   list of generators to be tested.</li>
+     *  <li>Number of threads to use concurrently: One thread will process one of
+     *    the generators to be tested.</li>
+     *  <li>Name of a class that implements {@code Iterable<UniformRandomProvider>}
+     *   (and defines a default constructor): Each generator of the list will be
+     *   tested by one instance of the analyzer program</li>
+     *  <li>Path to the executable: this is the analyzer software that reads 32-bits
+     *   integers from stdin.</li>
+     *  <li>All remaining arguments are passed to the executable.</li>
+     * </ol>
+     */
+    public static void main(String[] args) {
+        final String output = args[0];
+        final int numThreads = Integer.parseInt(args[1]);
+
+        final Iterable<UniformRandomProvider> rngList = createGeneratorsList(args[2]);
+
+        final List<String> cmdLine = new ArrayList<String>();
+        cmdLine.addAll(Arrays.asList(Arrays.copyOfRange(args, 3, args.length)));
+
+        final RandomStressTester app = new RandomStressTester(cmdLine, output);
+
+        try {
+            app.run(rngList, numThreads);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Creates the tasks and starts the processes.
+     *
+     * @param generators List of generators to be analyzed.
+     * @param numConcurrentTasks Number of concurrent tasks.
+     * Twice as many threads will be started: one thread for the RNG and one
+     * for the analyzer.
+     * @throws IOException if an error occurs when writing to the disk.
+     */
+    private void run(Iterable<UniformRandomProvider> generators,
+                     int numConcurrentTasks)
+        throws IOException {
+        // Parallel execution.
+        final ExecutorService service = Executors.newFixedThreadPool(numConcurrentTasks);
+
+        // Placeholder (output will be "null").
+        final List<Future<?>> execOutput = new ArrayList<Future<?>>();
+
+        // Run tasks.
+        int count = 0;
+        for (UniformRandomProvider rng : generators) {
+            final File output = new File(fileOutputPrefix + (++count));
+            final Runnable r = new Task(rng, output);
+            execOutput.add(service.submit(r));
+        }
+
+        // Wait for completion (ignoring return value).
+        try {
+            for (Future<?> f : execOutput) {
+                try {
+                    f.get();
+                } catch (ExecutionException e) {
+                    System.err.println(e.getCause().getMessage());
+                }
+            }
+        } catch (InterruptedException ignored) {}
+
+        // Terminate all threads.
+        service.shutdown();
+    }
+
+    /**
+     * Creates the list of generators to be tested.
+     *
+     * @param name Name of the class that contains the generators to be
+     * analyzed.
+     * @return the list of generators.
+     * @throws IllegalStateException if an error occurs during instantiation.
+     */
+    private static Iterable<UniformRandomProvider> createGeneratorsList(String name) {
+        try {
+            return (Iterable<UniformRandomProvider>) Class.forName(name).newInstance();
+        } catch (ClassNotFoundException|
+                 InstantiationException|
+                 IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Pipes random numbers to the standard input of an analyzer.
+     */
+    private class Task implements Runnable {
+        /** Directory for reports of the tester processes. */
+        private final File output;
+        /** RNG to be tested. */
+        private final UniformRandomProvider rng;
+
+        /**
+         * Creates the task.
+         *
+         * @param random RNG to be tested.
+         * @param report Report file.
+         */
+        Task(UniformRandomProvider random,
+             File report) {
+            rng = random;
+            output = report;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+            public void run() {
+            try {
+                // Write header.
+                printHeader(output, rng);
+
+                // Start test suite.
+                final ProcessBuilder builder = new ProcessBuilder(cmdLine);
+                builder.redirectOutput(ProcessBuilder.Redirect.appendTo(output));
+                final Process testingProcess = builder.start();
+                final DataOutputStream sink = new DataOutputStream(testingProcess.getOutputStream());
+
+                final long startTime = System.nanoTime();
+
+                try {
+                    while (true) {
+                        sink.writeInt(rng.nextInt());
+                    }
+                } catch (IOException e) {
+                    // Hopefully getting here when the analyzing software terminates.
+                }
+
+                final long endTime = System.nanoTime();
+
+                // Write footer.
+                printFooter(output, endTime - startTime);
+
+            } catch (IOException e) {
+                throw new RuntimeException("Failed to start task: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * @param output File.
+     * @param rng Generator being tested.
+     * @param cmdLine
+     * @throws IOException if there was a problem opening or writing to
+     * the {@code output} file.
+     */
+    private void printHeader(File output,
+                             UniformRandomProvider rng)
+        throws IOException {
+        final StringBuilder sb = new StringBuilder();
+        sb.append(C).append(N);
+        sb.append(C).append("RNG: ").append(rng.toString()).append(N);
+        sb.append(C).append(N);
+        sb.append(C).append("Java: ").append(System.getProperty("java.version")).append(N);
+        sb.append(C).append("Runtime: ").append(System.getProperty("java.runtime.version", "?")).append(N);
+        sb.append(C).append("JVM: ").append(System.getProperty("java.vm.name"))
+            .append(" ").append(System.getProperty("java.vm.version")).append(N);
+        sb.append(C).append("OS: ").append(System.getProperty("os.name"))
+            .append(" ").append(System.getProperty("os.version"))
+            .append(" ").append(System.getProperty("os.arch")).append(N);
+        sb.append(C).append(N);
+
+        sb.append(C).append("Analyzer: ");
+        for (String s : cmdLine) {
+            sb.append(s).append(" ");
+        }
+        sb.append(N);
+        sb.append(C).append(N);
+
+        final PrintWriter w = new PrintWriter(new FileWriter(output, true));
+        w.print(sb.toString());
+        w.close();
+    }
+
+    /**
+     * @param output File.
+     * @param nanoTime Duration of the run.
+     * @throws IOException if there was a problem opening or writing to
+     * the {@code output} file.
+     */
+    private void printFooter(File output,
+                             long nanoTime)
+        throws IOException {
+        final PrintWriter w = new PrintWriter(new FileWriter(output, true));
+        w.println(C);
+
+        final double duration = ((double) nanoTime) * 1e-9 / 60;
+        w.println(C + "Test duration: " + duration + " minutes");
+
+        w.println(C);
+        w.close();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/package-info.java b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
new file mode 100644
index 0000000..5b59e08
--- /dev/null
+++ b/commons-rng-examples/examples-stress/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+/**
+ * <h3>Stress test application</h3>
+ *
+ * <p>
+ * This package contains an application for interfacing with external
+ * software that perform stringent tests to check the uniformity of
+ * the sequences being passed to them.
+ * </p>
+ */
+
+package org.apache.commons.rng.examples.stress;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/pom.xml
----------------------------------------------------------------------
diff --git a/commons-rng-examples/pom.xml b/commons-rng-examples/pom.xml
index 07a04be..276aac7 100644
--- a/commons-rng-examples/pom.xml
+++ b/commons-rng-examples/pom.xml
@@ -29,6 +29,7 @@
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-rng-examples</artifactId>
   <version>1.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
   <name>Apache Commons RNG Examples</name>
 
   <description>Examples of use of the random numbers generator implemented in the "commons-rng-simple" module.
@@ -47,18 +48,25 @@
     <rng.parent.dir>${basedir}/..</rng.parent.dir>
   </properties>
 
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-rng-simple</artifactId>
-      <version>1.1-SNAPSHOT</version>
-    </dependency>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-rng-simple</artifactId>
+        <version>1.1-SNAPSHOT</version>
+      </dependency>
 
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-rng-sampling</artifactId>
-      <version>1.1-SNAPSHOT</version>
-    </dependency>
-  </dependencies>
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-rng-sampling</artifactId>
+        <version>1.1-SNAPSHOT</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
 
+  <modules>
+    <module>examples-stress</module>
+    <module>examples-sampling</module>
+    <module>examples-quadrature</module>
+  </modules>
 </project>

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/c/stdin2testu01.c
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/c/stdin2testu01.c b/commons-rng-examples/src/main/c/stdin2testu01.c
deleted file mode 100644
index d1a4a6a..0000000
--- a/commons-rng-examples/src/main/c/stdin2testu01.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * Utility for simple interfacing with the "TestU01" library:
- *  http://simul.iro.umontreal.ca/testu01/tu01.html
- *
- * It reads from its standard input an infinite sequence of 32-bits
- * integers and runs one of the test suites "SmallCrush", "Crush" or
- * "BigCrush".
- * "TestU01" writes its report to standard output.
- */
-
-#include <stdint.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <testu01/unif01.h>
-#include <testu01/bbattery.h>
-#include <testu01/util.h>
-
-#define TU_S "SmallCrush"
-#define TU_C "Crush"
-#define TU_B "BigCrush"
-#define BUFFER_LENGTH 256
-
-typedef struct {
-  unsigned long buffer[BUFFER_LENGTH];
-  uint32_t index;
-} StdinReader_state;
-
-unsigned long nextInt(void *par,
-                      void *sta) {
-  StdinReader_state *state = (StdinReader_state *) sta;
-  if (state->index >= BUFFER_LENGTH) {
-    /* Refill. */
-    fread(state->buffer, sizeof(unsigned long), BUFFER_LENGTH, stdin);
-    state->index = 0;
-  }
-
-  uint32_t random = state->buffer[state->index];
-  ++state->index; /* Next request. */
-
-  return random;
-}
-
-double nextDouble(void *par,
-                  void *sta) {
-  return nextInt(par, sta) / 4294967296.0;
-}
-
-
-static void dummy(void *sta) {
-  printf("N/A");
-
-  return;
-}
-
-unif01_Gen *createStdinReader(void) {
-   unif01_Gen *gen;
-   StdinReader_state *state;
-   size_t len;
-   char name[60];
-
-   state = util_Malloc(sizeof(StdinReader_state));
-
-   gen = util_Malloc(sizeof(unif01_Gen));
-   gen->state = state;
-   gen->param = NULL;
-   gen->Write = dummy;
-   gen->GetU01 = nextDouble;
-   gen->GetBits = nextInt;
-
-   strcpy(name, "stdin");
-   len = strlen(name);
-   gen->name = util_Calloc(len + 1, sizeof (char));
-   strncpy(gen->name, name, len);
-
-   // Read binary input.
-   freopen(NULL, "rb", stdin);
-   state->index = BUFFER_LENGTH;
-
-   return gen;
-}
-
-void deleteStdinReader(unif01_Gen *gen) {
-   gen->state = util_Free(gen->state);
-   gen->name = util_Free(gen->name);
-   util_Free(gen);
-}
-
-int main(int argc,
-         char **argv) {
-  unif01_Gen *gen = createStdinReader();
-  char *spec = argv[1];
-
-  if (argc < 2) {
-    printf("[ERROR] Specify test suite: '%s', '%s' or '%s'\n", TU_S, TU_C, TU_B);
-    exit(1);
-  } else if (strcmp(spec, TU_S) == 0) {
-    bbattery_SmallCrush(gen);
-  } else if (strcmp(spec, TU_C) == 0) {
-    bbattery_Crush(gen);
-  } else if (strcmp(spec, TU_B) == 0) {
-    bbattery_BigCrush(gen);
-  } else {
-    printf("[ERROR] Unknown specification: '%s'\n", spec);
-    exit(1);
-  }
-
-  deleteStdinReader(gen);
-  return 0;
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/ComputePi.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/ComputePi.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/ComputePi.java
deleted file mode 100644
index 7218e8a..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/ComputePi.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.integration;
-
-import org.apache.commons.rng.simple.RandomSource;
-
-/**
- * Computation of \( \pi \) using Monte-Carlo integration.
- *
- * The computation estimates the value by computing the probability that
- * a point \( p = (x, y) \) will lie in the circle of radius \( r = 1 \)
- * inscribed in the square of side \( r = 1 \).
- * The probability could be computed by \[ area_{circle} / area_{square} \],
- * where \( area_{circle} = \pi * r^2 \) and \( area_{square} = 4 r^2 \).
- * Hence, the probability is \( \frac{\pi}{4} \).
- *
- * The Monte Carlo simulation will produce \( N \) points.
- * Defining \( N_c \) as the number of point that satisfy \( x^2 + y^2 \le 1 \),
- * we will have \( \frac{N_c}{N} \approx \frac{\pi}{4} \).
- */
-public class ComputePi extends MonteCarloIntegration {
-    /** Domain dimension. */
-    private static final int DIMENSION = 2;
-
-    /**
-     * @param source RNG algorithm.
-     */
-    public ComputePi(RandomSource source) {
-        super(source, DIMENSION);
-    }
-
-    /**
-     * Program entry point.
-     *
-     * @param args Arguments.
-     * The order is as follows:
-     * <ol>
-     *  <li>
-     *   Number of random 2-dimensional points to generate.
-     *  </li>
-     *  <li>
-     *   {@link RandomSource Random source identifier}.
-     *  </li>
-     * </ol>
-     */
-    public static void main(String[] args) {
-        if (args.length != 2) {
-            throw new IllegalStateException("Missing arguments");
-        }
-
-        final long numPoints = Long.parseLong(args[0]);
-        final RandomSource randomSource = RandomSource.valueOf(args[1]);
-
-        final ComputePi piApp = new ComputePi(randomSource);
-        final double piMC = piApp.compute(numPoints);
-
-        //CHECKSTYLE: stop all
-        System.out.println("After generating " + (DIMENSION * numPoints) +
-                           " random numbers, the error on 𝛑 is " + Math.abs(piMC - Math.PI));
-        //CHECKSTYLE: resume all
-    }
-
-    /**
-     * @param numPoints Number of random points to generate.
-     * @return the approximate value of pi.
-     */
-    public double compute(long numPoints) {
-        return 4 * integrate(numPoints);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected boolean isInside(double ... rand) {
-        final double r2 = rand[0] * rand[0] + rand[1] * rand[1];
-        return r2 <= 1;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/MonteCarloIntegration.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/MonteCarloIntegration.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/MonteCarloIntegration.java
deleted file mode 100644
index 7631b2e..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/MonteCarloIntegration.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * 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.integration;
-
-import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.simple.RandomSource;
-
-/**
- * <a href="https://en.wikipedia.org/wiki/Monte_Carlo_integration">Monte-Carlo method</a>
- * for approximating an integral on a n-dimensional unit cube.
- */
-public abstract class MonteCarloIntegration {
-    /** RNG. */
-    private final UniformRandomProvider rng;
-    /** Integration domain dimension. */
-    private final int dimension;
-
-    /**
-     * Simulation constructor.
-     *
-     * @param source RNG algorithm.
-     * @param dimension Integration domain dimension.
-     */
-    public MonteCarloIntegration(RandomSource source,
-                                 int dimension) {
-        this.rng = RandomSource.create(source);
-        this.dimension = dimension;
-    }
-
-    /**
-     * Run the Monte-Carlo integration.
-     *
-     * @param n Number of random points to generate.
-     * @return the integral.
-     */
-    public double integrate(long n) {
-        double result = 0;
-        long inside = 0;
-        long total = 0;
-        while (total < n) {
-            if (isInside(generateU01())) {
-                ++inside;
-            }
-
-            ++total;
-            result = inside / (double) total;
-        }
-
-        return result;
-    }
-
-    /**
-     * Indicates whether the given points is inside the region whose
-     * integral is computed.
-     *
-     * @param point Point whose coordinates are random numbers uniformly
-     * distributed in the unit interval.
-     * @return {@code true} if the {@code point} is inside.
-     */
-    protected abstract boolean isInside(double ... point);
-
-    /**
-     * @return a value from a random sequence uniformly distributed
-     * in the {@code [0, 1)} interval.
-     */
-    private double[] generateU01() {
-        final double[] rand = new double[dimension];
-
-        for (int i = 0; i < dimension; i++) {
-            rand[i] = rng.nextDouble();
-        }
-
-        return rand;
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/package-info.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/package-info.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/package-info.java
deleted file mode 100644
index 8fced09..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/integration/package-info.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * <h3>Monte-Carlo integration</h3>
- *
- * <p>
- * This package contains a simple application that uses many
- * uniformly-distributed random numbers.
- * </p>
- */
-
-package org.apache.commons.rng.examples.integration;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/package-info.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/package-info.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/package-info.java
deleted file mode 100644
index a88e369..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/package-info.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * <h3>Usage examples</h3>
- *
- * <p>
- * This package contains examples of use of the Commons RNG library.
- * </p>
- */
-
-package org.apache.commons.rng.examples;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximation.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximation.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximation.java
deleted file mode 100644
index 3fa5ace..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/ProbabilityDensityApproximation.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * 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.sampling;
-
-import java.io.PrintWriter;
-import java.io.IOException;
-import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.simple.RandomSource;
-import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.BoxMullerNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.ChengBetaSampler;
-import org.apache.commons.rng.sampling.distribution.AhrensDieterExponentialSampler;
-import org.apache.commons.rng.sampling.distribution.AhrensDieterMarsagliaTsangGammaSampler;
-import org.apache.commons.rng.sampling.distribution.InverseTransformParetoSampler;
-import org.apache.commons.rng.sampling.distribution.LogNormalSampler;
-import org.apache.commons.rng.sampling.distribution.ContinuousUniformSampler;
-import org.apache.commons.rng.sampling.distribution.GaussianSampler;
-import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
-
-/**
- * Approximation of the probability density by the histogram of the sampler output.
- */
-public class ProbabilityDensityApproximation {
-    /** Number of (equal-width) bins in the histogram. */
-    private final int numBins;
-    /** Number of samples to be generated. */
-    private final long numSamples;
-
-    /**
-     * Application.
-     *
-     * @param numBins Number of "equal-width" bins.
-     * @param numSamples Number of samples.
-     */
-    private ProbabilityDensityApproximation(int numBins,
-                                            long numSamples) {
-        this.numBins = numBins;
-        this.numSamples = numSamples;
-    }
-
-    /**
-     * @param sampler Sampler.
-     * @param min Right abscissa of the first bin: every sample smaller
-     * than that value will increment an additional bin (of infinite width)
-     * placed before the first "equal-width" bin.
-     * @param Left abscissa of the last bin: every sample larger than or
-     * equal to that value will increment an additional bin (of infinite
-     * width) placed after the last "equal-width" bin.
-     * @param output Filename.
-     */
-    private void createDensity(ContinuousSampler sampler,
-                               double min,
-                               double max,
-                               String outputFile)
-        throws IOException {
-        final double binSize = (max - min) / numBins;
-        final long[] histogram = new long[numBins];
-
-        long n = 0;
-        long belowMin = 0;
-        long aboveMax = 0;
-        while (++n < numSamples) {
-            final double r = sampler.sample();
-
-            if (r < min) {
-                ++belowMin;
-                continue;
-            }
-
-            if (r >= max) {
-                ++aboveMax;
-                continue;
-            }
-
-            final int binIndex = (int) ((r - min) / binSize);
-            ++histogram[binIndex];
-        }
-
-        final double binHalfSize = 0.5 * binSize;
-        final double norm = 1 / (binSize * numSamples);
-
-        final PrintWriter out = new PrintWriter(outputFile);
-        out.println("# Sampler: " + sampler);
-        out.println("# Number of bins: " + numBins);
-        out.println("# Min: " + min + " (fraction of samples below: " + (belowMin / (double) numSamples) + ")");
-        out.println("# Max: " + max + " (fraction of samples above: " + (aboveMax / (double) numSamples) + ")");
-        out.println("# Bin width: " + binSize);
-        out.println("# Histogram normalization factor: " + norm);
-        out.println("#");
-        out.println("# " + (min - binHalfSize) + " " + (belowMin * norm));
-        for (int i = 0; i < numBins; i++) {
-            out.println((min + (i + 1) * binSize - binHalfSize) + " " + (histogram[i] * norm));
-        }
-        out.println("# " + (max + binHalfSize) + " " + (aboveMax * norm));
-        out.close();
-    }
-
-    /**
-     * Program entry point.
-     *
-     * @param args Argument. They must be provided, in the following order:
-     * <ol>
-     *  <li>Number of "equal-width" bins.</li>
-     *  <li>Number of samples.</li>
-     * </ol>
-     * @throws IOException if failure occurred while writing to files.
-     */
-    public static void main(String[] args)
-        throws IOException {
-        final int numBins = Integer.valueOf(args[0]);
-        final long numSamples = Long.valueOf(args[1]);
-        final ProbabilityDensityApproximation app = new ProbabilityDensityApproximation(numBins, numSamples);
-
-        final UniformRandomProvider rng = RandomSource.create(RandomSource.XOR_SHIFT_1024_S);
-
-        final double gaussMean = 1;
-        final double gaussSigma = 2;
-        final double gaussMin = -9;
-        final double gaussMax = 11;
-        app.createDensity(new GaussianSampler(new ZigguratNormalizedGaussianSampler(rng),
-                                              gaussMean, gaussSigma),
-                          gaussMin, gaussMax, "gauss.ziggurat.txt");
-        app.createDensity(new GaussianSampler(new MarsagliaNormalizedGaussianSampler(rng),
-                                              gaussMean, gaussSigma),
-                          gaussMin, gaussMax, "gauss.marsaglia.txt");
-        app.createDensity(new GaussianSampler(new BoxMullerNormalizedGaussianSampler(rng),
-                                              gaussMean, gaussSigma),
-                          gaussMin, gaussMax, "gauss.boxmuller.txt");
-
-        final double alphaBeta = 4.3;
-        final double betaBeta = 2.1;
-        final double betaMin = 0;
-        final double betaMax = 1;
-        app.createDensity(new ChengBetaSampler(rng, alphaBeta, betaBeta),
-                          betaMin, betaMax, "beta.case1.txt");
-        final double alphaBetaAlt = 0.5678;
-        final double betaBetaAlt = 0.1234;
-        app.createDensity(new ChengBetaSampler(rng, alphaBetaAlt, betaBetaAlt),
-                          betaMin, betaMax, "beta.case2.txt");
-
-        final double meanExp = 3.45;
-        final double expMin = 0;
-        final double expMax = 60;
-        app.createDensity(new AhrensDieterExponentialSampler(rng, meanExp),
-                          expMin, expMax, "exp.txt");
-
-        final double thetaGammaSmallerThanOne = 0.1234;
-        final double alphaGamma = 3.456;
-        final double gammaMin = 0;
-        final double gammaMax1 = 40;
-        app.createDensity(new AhrensDieterMarsagliaTsangGammaSampler(rng, alphaGamma, thetaGammaSmallerThanOne),
-                          gammaMin, gammaMax1, "gamma.case1.txt");
-        final double thetaGammaLargerThanOne = 2.345;
-        final double gammaMax2 = 70;
-        app.createDensity(new AhrensDieterMarsagliaTsangGammaSampler(rng, alphaGamma, thetaGammaLargerThanOne),
-                          gammaMin, gammaMax2, "gamma.case2.txt");
-
-        final double scalePareto = 23.45;
-        final double shapePareto = 0.789;
-        final double paretoMin = 23;
-        final double paretoMax = 400;
-        app.createDensity(new InverseTransformParetoSampler(rng, scalePareto, shapePareto),
-                          paretoMin, paretoMax, "pareto.txt");
-
-        final double loUniform = -9.876;
-        final double hiUniform = 5.432;
-        app.createDensity(new ContinuousUniformSampler(rng, loUniform, hiUniform),
-                          loUniform, hiUniform, "uniform.txt");
-
-        final double scaleLogNormal = 2.345;
-        final double shapeLogNormal = 0.1234;
-        final double logNormalMin = 5;
-        final double logNormalMax = 25;
-        app.createDensity(new LogNormalSampler(new ZigguratNormalizedGaussianSampler(rng),
-                                               scaleLogNormal, shapeLogNormal),
-                          logNormalMin, logNormalMax, "lognormal.ziggurat.txt");
-        app.createDensity(new LogNormalSampler(new MarsagliaNormalizedGaussianSampler(rng),
-                                               scaleLogNormal, shapeLogNormal),
-                          logNormalMin, logNormalMax, "lognormal.marsaglia.txt");
-        app.createDensity(new LogNormalSampler(new BoxMullerNormalizedGaussianSampler(rng),
-                                               scaleLogNormal, shapeLogNormal),
-                          logNormalMin, logNormalMax, "lognormal.boxmuller.txt");
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/UniformSamplingVisualCheck.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/UniformSamplingVisualCheck.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/UniformSamplingVisualCheck.java
deleted file mode 100644
index b7c901c..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/UniformSamplingVisualCheck.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * 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.sampling;
-
-import org.apache.commons.rng.UniformRandomProvider;
-import org.apache.commons.rng.simple.RandomSource;
-import org.apache.commons.rng.sampling.distribution.ZigguratNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.BoxMullerNormalizedGaussianSampler;
-import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
-
-/**
- * Creates 2D plot of sampling output.
- * It is a "manual" check that could help ensure that no artefacts 
- * exist in some tiny region of the expected range, due to loss of
- * accuracy, e.g. when porting C code based on 32-bits "float" to
- * "Commons RNG" that uses Java "double" (64-bits).
- */
-public class UniformSamplingVisualCheck {
-    /** RNG. */
-    private final UniformRandomProvider rng = RandomSource.create(RandomSource.XOR_SHIFT_1024_S);
-    /** Samplers. */
-    private final ContinuousSampler[] samplers = new ContinuousSampler[] {
-        new ZigguratNormalizedGaussianSampler(rng),
-        new MarsagliaNormalizedGaussianSampler(rng),
-        new BoxMullerNormalizedGaussianSampler(rng),
-    };
-
-    /**
-     * Program entry point.
-     *
-     * @param args Unused.
-     */
-    public static void main(String[] args) {
-        final float lo = 0.1f;
-        final int bands = 2;
-        float hi = lo;
-        for (int i = 0; i < bands; i++) {
-            hi = Math.nextUp(hi);
-        }
-        System.out.printf("# lo=%.10e hi=%.10e", lo, hi);
-        System.out.println();
-
-        final UniformSamplingVisualCheck app = new UniformSamplingVisualCheck();
-
-        while (true) {
-            System.out.printf("%.16e\t", app.rng.nextDouble());
-
-            for (ContinuousSampler s : app.samplers) {
-                while (true) {
-                    final double r = s.sample();
-                    if (r < lo ||
-                        r > hi) {
-                        // Discard numbers outside the tiny region.
-                         continue;
-                     }
-
-                    System.out.printf("%.16e ", r);
-                    break;
-                }
-            }
-
-            System.out.println();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/package-info.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/package-info.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/package-info.java
deleted file mode 100644
index 8f7a268..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/sampling/package-info.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * <h3>Sampling</h3>
- *
- * <p>
- * This package contains usage examples of the samplers provided in the
- * <a href="http://commons.apache.org/rng">Commons RNG</a> library.
- * </p>
- */
-
-package org.apache.commons.rng.examples.sampling;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
deleted file mode 100644
index 037f60b..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/GeneratorsList.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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.simple.RandomSource;
-
-/**
- * List of generators.
- */
-public class GeneratorsList implements Iterable<UniformRandomProvider> {
-    /** List. */
-    private final List<UniformRandomProvider> list = new ArrayList<UniformRandomProvider>();
-
-    /**
-     * Creates list.
-     */
-    public GeneratorsList() {
-        list.add(RandomSource.create(RandomSource.JDK));
-        list.add(RandomSource.create(RandomSource.MT));
-        list.add(RandomSource.create(RandomSource.WELL_512_A));
-        list.add(RandomSource.create(RandomSource.WELL_1024_A));
-        list.add(RandomSource.create(RandomSource.WELL_19937_A));
-        list.add(RandomSource.create(RandomSource.WELL_19937_C));
-        list.add(RandomSource.create(RandomSource.WELL_44497_A));
-        list.add(RandomSource.create(RandomSource.WELL_44497_B));
-        list.add(RandomSource.create(RandomSource.ISAAC));
-        list.add(RandomSource.create(RandomSource.MT_64));
-        list.add(RandomSource.create(RandomSource.SPLIT_MIX_64));
-        list.add(RandomSource.create(RandomSource.XOR_SHIFT_1024_S));
-        list.add(RandomSource.create(RandomSource.TWO_CMRES));
-        list.add(RandomSource.create(RandomSource.MWC_256));
-        list.add(RandomSource.create(RandomSource.KISS));
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public Iterator<UniformRandomProvider> iterator() {
-        return list.iterator();
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
deleted file mode 100644
index 1cad0dd..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/RandomStressTester.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * 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.Arrays;
-import java.io.IOException;
-import java.io.File;
-import java.io.PrintWriter;
-import java.io.FileWriter;
-import java.io.DataOutputStream;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-
-import org.apache.commons.rng.UniformRandomProvider;
-
-/**
- * Class that can be used for testing a generator by piping the values
- * returned by its {@link UniformRandomProvider#nextInt()} method to a
- * program that reads {@code int} values from its standard input and
- * writes an analysis report to standard output.
- *
- * The <a href="http://www.phy.duke.edu/~rgb/General/dieharder.php">
- * "dieharder"</a> test suite is such a software.
- *
- * Example of command line, assuming that "examples.jar" specifies this
- * class as the "main" class (see {@link #main(String[]) main} method):
- * <pre><code>
- *  $ java -jar examples.jar \
- *    report/dh_ \
- *    4 \
- *    org.apache.commons.rng.examples.stress.GeneratorsList \
- *    /usr/bin/dieharder -a -g 200 -Y 1 -k 2
- * </code></pre>
- */
-public class RandomStressTester {
-    /** Comment prefix. */
-    private static final String C = "# ";
-    /** New line. */
-    private static final String N = "\n";
-    /** Command line. */
-    private final List<String> cmdLine;
-    /** Output prefix. */
-    private final String fileOutputPrefix;
-
-    /**
-     * Creates the application.
-     *
-     * @param cmd Command line.
-     * @param outputPrefix Output prefix for file reports.
-     */
-    private RandomStressTester(List<String> cmd,
-                               String outputPrefix) {
-        final File exec = new File(cmd.get(0));
-        if (!exec.exists() ||
-            !exec.canExecute()) {
-            throw new IllegalArgumentException("Program is not executable: " + exec);
-        }
-
-        cmdLine = new ArrayList<String>(cmd);
-        fileOutputPrefix = outputPrefix;
-
-        final File reportDir = new File(fileOutputPrefix).getParentFile();
-        if (!reportDir.exists() ||
-            !reportDir.isDirectory() ||
-            !reportDir.canWrite()) {
-            throw new IllegalArgumentException("Invalid output directory: " + reportDir);
-        }
-    }
-
-    /**
-     * Program's entry point.
-     *
-     * @param args Application's arguments.
-     * The order is as follows:
-     * <ol>
-     *  <li>Output prefix: Filename prefix where the output of the analysis will
-     *   written to.  The appended suffix is the index of the instance within the
-     *   list of generators to be tested.</li>
-     *  <li>Number of threads to use concurrently: One thread will process one of
-     *    the generators to be tested.</li>
-     *  <li>Name of a class that implements {@code Iterable<UniformRandomProvider>}
-     *   (and defines a default constructor): Each generator of the list will be
-     *   tested by one instance of the analyzer program</li>
-     *  <li>Path to the executable: this is the analyzer software that reads 32-bits
-     *   integers from stdin.</li>
-     *  <li>All remaining arguments are passed to the executable.</li>
-     * </ol>
-     */
-    public static void main(String[] args) {
-        final String output = args[0];
-        final int numThreads = Integer.parseInt(args[1]);
-
-        final Iterable<UniformRandomProvider> rngList = createGeneratorsList(args[2]);
-
-        final List<String> cmdLine = new ArrayList<String>();
-        cmdLine.addAll(Arrays.asList(Arrays.copyOfRange(args, 3, args.length)));
-
-        final RandomStressTester app = new RandomStressTester(cmdLine, output);
-
-        try {
-            app.run(rngList, numThreads);
-        } catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Creates the tasks and starts the processes.
-     *
-     * @param generators List of generators to be analyzed.
-     * @param numConcurrentTasks Number of concurrent tasks.
-     * Twice as many threads will be started: one thread for the RNG and one
-     * for the analyzer.
-     * @throws IOException if an error occurs when writing to the disk.
-     */
-    private void run(Iterable<UniformRandomProvider> generators,
-                     int numConcurrentTasks)
-        throws IOException {
-        // Parallel execution.
-        final ExecutorService service = Executors.newFixedThreadPool(numConcurrentTasks);
-
-        // Placeholder (output will be "null").
-        final List<Future<?>> execOutput = new ArrayList<Future<?>>();
-
-        // Run tasks.
-        int count = 0;
-        for (UniformRandomProvider rng : generators) {
-            final File output = new File(fileOutputPrefix + (++count));
-            final Runnable r = new Task(rng, output);
-            execOutput.add(service.submit(r));
-        }
-
-        // Wait for completion (ignoring return value).
-        try {
-            for (Future<?> f : execOutput) {
-                try {
-                    f.get();
-                } catch (ExecutionException e) {
-                    System.err.println(e.getCause().getMessage());
-                }
-            }
-        } catch (InterruptedException ignored) {}
-
-        // Terminate all threads.
-        service.shutdown();
-    }
-
-    /**
-     * Creates the list of generators to be tested.
-     *
-     * @param name Name of the class that contains the generators to be
-     * analyzed.
-     * @return the list of generators.
-     * @throws IllegalStateException if an error occurs during instantiation.
-     */
-    private static Iterable<UniformRandomProvider> createGeneratorsList(String name) {
-        try {
-            return (Iterable<UniformRandomProvider>) Class.forName(name).newInstance();
-        } catch (ClassNotFoundException|
-                 InstantiationException|
-                 IllegalAccessException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    /**
-     * Pipes random numbers to the standard input of an analyzer.
-     */
-    private class Task implements Runnable {
-        /** Directory for reports of the tester processes. */
-        private final File output;
-        /** RNG to be tested. */
-        private final UniformRandomProvider rng;
-
-        /**
-         * Creates the task.
-         *
-         * @param random RNG to be tested.
-         * @param report Report file.
-         */
-        Task(UniformRandomProvider random,
-             File report) {
-            rng = random;
-            output = report;
-        }
-
-        /** {@inheritDoc} */
-        @Override
-            public void run() {
-            try {
-                // Write header.
-                printHeader(output, rng);
-
-                // Start test suite.
-                final ProcessBuilder builder = new ProcessBuilder(cmdLine);
-                builder.redirectOutput(ProcessBuilder.Redirect.appendTo(output));
-                final Process testingProcess = builder.start();
-                final DataOutputStream sink = new DataOutputStream(testingProcess.getOutputStream());
-
-                final long startTime = System.nanoTime();
-
-                try {
-                    while (true) {
-                        sink.writeInt(rng.nextInt());
-                    }
-                } catch (IOException e) {
-                    // Hopefully getting here when the analyzing software terminates.
-                }
-
-                final long endTime = System.nanoTime();
-
-                // Write footer.
-                printFooter(output, endTime - startTime);
-
-            } catch (IOException e) {
-                throw new RuntimeException("Failed to start task: " + e.getMessage());
-            }
-        }
-    }
-
-    /**
-     * @param output File.
-     * @param rng Generator being tested.
-     * @param cmdLine
-     * @throws IOException if there was a problem opening or writing to
-     * the {@code output} file.
-     */
-    private void printHeader(File output,
-                             UniformRandomProvider rng)
-        throws IOException {
-        final StringBuilder sb = new StringBuilder();
-        sb.append(C).append(N);
-        sb.append(C).append("RNG: ").append(rng.toString()).append(N);
-        sb.append(C).append(N);
-        sb.append(C).append("Java: ").append(System.getProperty("java.version")).append(N);
-        sb.append(C).append("Runtime: ").append(System.getProperty("java.runtime.version", "?")).append(N);
-        sb.append(C).append("JVM: ").append(System.getProperty("java.vm.name"))
-            .append(" ").append(System.getProperty("java.vm.version")).append(N);
-        sb.append(C).append("OS: ").append(System.getProperty("os.name"))
-            .append(" ").append(System.getProperty("os.version"))
-            .append(" ").append(System.getProperty("os.arch")).append(N);
-        sb.append(C).append(N);
-
-        sb.append(C).append("Analyzer: ");
-        for (String s : cmdLine) {
-            sb.append(s).append(" ");
-        }
-        sb.append(N);
-        sb.append(C).append(N);
-
-        final PrintWriter w = new PrintWriter(new FileWriter(output, true));
-        w.print(sb.toString());
-        w.close();
-    }
-
-    /**
-     * @param output File.
-     * @param nanoTime Duration of the run.
-     * @throws IOException if there was a problem opening or writing to
-     * the {@code output} file.
-     */
-    private void printFooter(File output,
-                             long nanoTime)
-        throws IOException {
-        final PrintWriter w = new PrintWriter(new FileWriter(output, true));
-        w.println(C);
-
-        final double duration = ((double) nanoTime) * 1e-9 / 60;
-        w.println(C + "Test duration: " + duration + " minutes");
-
-        w.println(C);
-        w.close();
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/2fdb5227/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
----------------------------------------------------------------------
diff --git a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/package-info.java b/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
deleted file mode 100644
index 5b59e08..0000000
--- a/commons-rng-examples/src/main/java/org/apache/commons/rng/examples/stress/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * <h3>Stress test application</h3>
- *
- * <p>
- * This package contains an application for interfacing with external
- * software that perform stringent tests to check the uniformity of
- * the sequences being passed to them.
- * </p>
- */
-
-package org.apache.commons.rng.examples.stress;