commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From er...@apache.org
Subject [35/39] commons-rng git commit: Initial commit.
Date Sun, 07 Aug 2016 22:52:00 GMT
http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/source64/XorShift1024Star.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/source64/XorShift1024Star.java b/src/main/java/org/apache/commons/rng/internal/source64/XorShift1024Star.java
new file mode 100644
index 0000000..2e20f2b
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/source64/XorShift1024Star.java
@@ -0,0 +1,105 @@
+/*
+ * 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.internal.source64;
+
+import java.util.Arrays;
+import org.apache.commons.rng.internal.util.NumberFactory;
+
+/**
+ * A fast RNG.
+ *
+ * @see <a href="http://xorshift.di.unimi.it/xorshift1024star.c">
+ * Original source code</a>
+ *
+ * @since 4.0
+ */
+public class XorShift1024Star extends LongProvider {
+    /** Size of the state vector. */
+    private static final int SEED_SIZE = 16;
+    /** State. */
+    private final long[] state = new long[SEED_SIZE];
+    /** Index in "state" array. */
+    private int index;
+
+    /**
+     * Creates a new instance.
+     *
+     * @param seed Initial seed.
+     * If the length is larger than 16, only the first 16 elements will
+     * be used; if smaller, the remaining elements will be automatically
+     * set.
+     */
+    public XorShift1024Star(long[] seed) {
+        setSeedInternal(seed);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected byte[] getStateInternal() {
+        final long[] s = Arrays.copyOf(state, SEED_SIZE + 1);
+        s[SEED_SIZE] = index;
+
+        return NumberFactory.makeByteArray(s);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected void setStateInternal(byte[] s) {
+        checkStateSize(s, (SEED_SIZE + 1) * 8);
+
+        final long[] tmp = NumberFactory.makeLongArray(s);
+
+        System.arraycopy(tmp, 0, state, 0, SEED_SIZE);
+        index = (int) tmp[SEED_SIZE];
+    }
+
+    /**
+     * Seeds the RNG.
+     *
+     * @param seed Seed.
+     */
+    private void setSeedInternal(long[] seed) {
+        // Reset the whole state of this RNG (i.e. "state" and "index").
+        // Seeding procedure is not part of the reference code.
+
+        System.arraycopy(seed, 0, state, 0, Math.min(seed.length, state.length));
+
+        if (seed.length < SEED_SIZE) {
+            for (int i = seed.length; i < SEED_SIZE; i++) {
+                state[i] = 26021969L * i;
+            }
+            for (int i = SEED_SIZE - 1; i > seed.length; i--) {
+                state[i] ^= state[SEED_SIZE - i - 1];
+            }
+
+            state[seed.length] = 0x8000000000000000L; // Ensuring non-zero initial array.
+        }
+
+        index = 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public long next() {
+        final long s0 = state[index];
+        long s1 = state[index = (index + 1) & 15];
+        s1 ^= s1 << 31; // a
+        state[index] = s1 ^ s0 ^ (s1 >>> 11) ^ (s0 >>> 30); // b,c
+        return state[index] * 1181783497276652981L;
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/source64/package-info.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/source64/package-info.java b/src/main/java/org/apache/commons/rng/internal/source64/package-info.java
new file mode 100644
index 0000000..41639f3
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/source64/package-info.java
@@ -0,0 +1,52 @@
+/*
+ * 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>
+ * Concrete algorithms for {@code long}-based sources of randomness
+ * </h3>
+ *
+ * <p>
+ * <b>For internal use only:</b> Direct access to classes in this package
+ * is discouraged, as they could be modified without notice.
+ * </p>
+ *
+ * <p><b>Notes for developers</b></p>
+ *
+ * <ul>
+ *  <li>
+ *   A source of randomness must inherit from
+ *   {@link org.apache.commons.rng.internal.source64.LongProvider}
+ *  </li>
+ *  <li>
+ *   The "provider" must specify <em>one</em> way for setting the seed.
+ *   For a given seed, the generated sequence must always be the same.
+ *  </li>
+ *  <li>
+ *   The "provider" must implement methods {@code getStateInternal} and
+ *   {@code setStateInternal} in order to save and restore the state of an
+ *   instance (cf. {@link org.apache.commons.rng.internal.BaseProvider}).
+ *  </li>
+ *  <li>
+ *   When a new class is implemented here, user-access to it must be provided
+ *   through associated {@link org.apache.commons.rng.RandomSource
+ *   factory methods}.
+ *  </li>
+ * </ul>
+ */
+
+package org.apache.commons.rng.internal.source64;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/Int2Long.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/Int2Long.java b/src/main/java/org/apache/commons/rng/internal/util/Int2Long.java
new file mode 100644
index 0000000..5e71dd5
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/Int2Long.java
@@ -0,0 +1,37 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Converts a {@code Integer} to an {@code Long}.
+ *
+ * @since 4.0
+ */
+public class Int2Long implements SeedConverter<Integer, Long> {
+    /** {@inheritDoc} */
+    @Override
+    public Long convert(Integer seed) {
+        final int s = seed;
+        return NumberFactory.makeLong(s, ~s);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/IntArray2Int.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/IntArray2Int.java b/src/main/java/org/apache/commons/rng/internal/util/IntArray2Int.java
new file mode 100644
index 0000000..805d10d
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/IntArray2Int.java
@@ -0,0 +1,41 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Creates a single value by "xor" of all the values in the input array.
+ *
+ * @since 4.0
+ */
+public class IntArray2Int implements SeedConverter<int[], Integer> {
+    /** {@inheritDoc} */
+    @Override
+    public Integer convert(int[] seed) {
+        int out = 0;
+        for (int i = 0; i < seed.length; i++) {
+            out ^= seed[i];
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/IntArray2LongArray.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/IntArray2LongArray.java b/src/main/java/org/apache/commons/rng/internal/util/IntArray2LongArray.java
new file mode 100644
index 0000000..f504ed8
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/IntArray2LongArray.java
@@ -0,0 +1,44 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Creates a {@code long[]} from an {@code int[]}.
+ *
+ * @since 4.0
+ */
+public class IntArray2LongArray implements SeedConverter<int[], long[]> {
+    /** {@inheritDoc} */
+    @Override
+    public long[] convert(int[] seed) {
+        final int outSize = (seed.length + 1) / 2;
+        final long[] out = new long[outSize];
+        for (int i = 0; i < outSize; i++) {
+            final int lo = seed[i];
+            final int hi = outSize + i < seed.length ? seed[outSize + i] : 0;
+            out[i] = NumberFactory.makeLong(hi, lo) ;
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/Long2Int.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/Long2Int.java b/src/main/java/org/apache/commons/rng/internal/util/Long2Int.java
new file mode 100644
index 0000000..91b336c
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/Long2Int.java
@@ -0,0 +1,36 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Converts a {@code Long} to an {@code Integer}.
+ *
+ * @since 4.0
+ */
+public class Long2Int implements SeedConverter<Long, Integer> {
+    /** {@inheritDoc} */
+    @Override
+    public Integer convert(Long seed) {
+        return NumberFactory.makeInt(seed);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/Long2IntArray.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/Long2IntArray.java b/src/main/java/org/apache/commons/rng/internal/util/Long2IntArray.java
new file mode 100644
index 0000000..59c9d94
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/Long2IntArray.java
@@ -0,0 +1,50 @@
+/*
+ * 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.internal.util;
+
+import org.apache.commons.rng.internal.source64.SplitMix64;
+
+/**
+ * Uses a {@code long} value to seed a {@link SplitMix64} RNG and
+ * create a {@code int[]} with the requested number of random
+ * values.
+ *
+ * @since 4.0
+ */
+public class Long2IntArray implements SeedConverter<Long, int[]> {
+    /** Size of the output array. */
+    private final int size;
+
+    /**
+     * @param size Size of the output array.
+     */
+    public Long2IntArray(int size) {
+        this.size = size;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int[] convert(Long seed) {
+        return SeedFactory.createIntArray(size, new SplitMix64(seed));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "(size=" + size + ")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/Long2LongArray.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/Long2LongArray.java b/src/main/java/org/apache/commons/rng/internal/util/Long2LongArray.java
new file mode 100644
index 0000000..1e1a33c
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/Long2LongArray.java
@@ -0,0 +1,56 @@
+/*
+ * 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.internal.util;
+
+import org.apache.commons.rng.internal.source64.SplitMix64;
+
+/**
+ * Uses a {@code Long} value to seed a {@link SplitMix64} RNG and
+ * create a {@code long[]} with the requested number of random
+ * values.
+ *
+ * @since 4.0
+ */
+public class Long2LongArray implements SeedConverter<Long, long[]> {
+    /** Size of the output array. */
+    private final int size;
+
+    /**
+     * @param size Size of the output array.
+     */
+    public Long2LongArray(int size) {
+        this.size = size;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public long[] convert(Long seed) {
+        final long[] out = new long[size];
+        final SplitMix64 rng = new SplitMix64(seed);
+        for (int i = 0; i < size; i++) {
+            out[i] = rng.nextLong();
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "(size: " + size + ")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/LongArray2IntArray.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/LongArray2IntArray.java b/src/main/java/org/apache/commons/rng/internal/util/LongArray2IntArray.java
new file mode 100644
index 0000000..6902177
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/LongArray2IntArray.java
@@ -0,0 +1,43 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Creates an {@code int[]} from a {@code long[]}.
+ *
+ * @since 4.0
+ */
+public class LongArray2IntArray implements SeedConverter<long[], int[]> {
+    /** {@inheritDoc} */
+    @Override
+    public int[] convert(long[] seed) {
+        final int[] out = new int[seed.length * 2];
+        for (int i = 0; i < seed.length; i++) {
+            final long current = seed[i];
+            out[i] = NumberFactory.extractLo(current);
+            out[seed.length + i] = NumberFactory.extractHi(current);
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/LongArray2Long.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/LongArray2Long.java b/src/main/java/org/apache/commons/rng/internal/util/LongArray2Long.java
new file mode 100644
index 0000000..c0b4987
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/LongArray2Long.java
@@ -0,0 +1,41 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Creates a single value by "xor" of all the values in the input array.
+ *
+ * @since 4.0
+ */
+public class LongArray2Long implements SeedConverter<long[], Long> {
+    /** {@inheritDoc} */
+    @Override
+    public Long convert(long[] seed) {
+        long out = 0;
+        for (int i = 0; i < seed.length; i++) {
+            out ^= seed[i];
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/LongMixInt.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/LongMixInt.java b/src/main/java/org/apache/commons/rng/internal/util/LongMixInt.java
new file mode 100644
index 0000000..31679c0
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/LongMixInt.java
@@ -0,0 +1,50 @@
+/*
+ * 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.internal.util;
+
+import org.apache.commons.rng.internal.source64.SplitMix64;
+
+/**
+ * Uses a {@code long} value to seed a {@link SplitMix64} RNG and
+ * create an {@code int[]} with the requested number of random
+ * values.
+ *
+ * @since 4.0
+ */
+public class LongMixInt implements SeedConverter<Long, int[]> {
+    /** Size of the output array. */
+    private final int size;
+
+    /**
+     * @param size Size of the output array.
+     */
+    public LongMixInt(int size) {
+        this.size = size;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int[] convert(Long seed) {
+        return SeedFactory.createIntArray(size, new SplitMix64(seed));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "(size=" + size + ")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/LongMixLong.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/LongMixLong.java b/src/main/java/org/apache/commons/rng/internal/util/LongMixLong.java
new file mode 100644
index 0000000..95568c0
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/LongMixLong.java
@@ -0,0 +1,56 @@
+/*
+ * 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.internal.util;
+
+import org.apache.commons.rng.internal.source64.SplitMix64;
+
+/**
+ * Uses a {@code long} value to seed a {@link SplitMix64} RNG and
+ * create a {@code long[]} with the requested number of random
+ * values.
+ *
+ * @since 4.0
+ */
+public class LongMixLong implements SeedConverter<Long, long[]> {
+    /** Size of the output array. */
+    private final int size;
+
+    /**
+     * @param size Size of the output array.
+     */
+    public LongMixLong(int size) {
+        this.size = size;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public long[] convert(Long seed) {
+        final long[] out = new long[size];
+        final SplitMix64 rng = new SplitMix64(seed);
+        for (int i = 0; i < size; i++) {
+            out[i] = rng.nextLong();
+        }
+
+        return out;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + "(size: " + size + ")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/NoOpConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/NoOpConverter.java b/src/main/java/org/apache/commons/rng/internal/util/NoOpConverter.java
new file mode 100644
index 0000000..1979fa6
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/NoOpConverter.java
@@ -0,0 +1,40 @@
+/*
+ * 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.internal.util;
+
+
+/**
+ * Dummy converter that simply passes on its input.
+ * It can be useful to avoid "unchecked" compiler warnings.
+ *
+ * @param <SEED> Seed type.
+ *
+ * @since 4.0
+ */
+public class NoOpConverter<SEED> implements SeedConverter<SEED, SEED> {
+    /** {@inheritDoc} */
+    @Override
+    public SEED convert(SEED seed) {
+        return seed;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return "Pass-through";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/NumberFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/NumberFactory.java b/src/main/java/org/apache/commons/rng/internal/util/NumberFactory.java
new file mode 100644
index 0000000..b350c63
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/NumberFactory.java
@@ -0,0 +1,331 @@
+/*
+ * 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.internal.util;
+
+import java.util.Arrays;
+
+/**
+ * Utility for creating number types from one or two {@code int} values
+ * or one {@code long} value, or a sequence of bytes.
+ */
+public final class NumberFactory {
+    /** See {@link #makeDouble(long)} */
+    private static final long DOUBLE_HIGH_BITS = 0x3ffL << 52;
+    /** See {@link #makeFloat(int)} */
+    private static final float FLOAT_MULTIPLIER = 0x1.0p-23f;
+    /** See {@link #makeDouble(int, int)} */
+    private static final double DOUBLE_MULTIPLIER = 0x1.0p-52d;
+    /** Lowest byte mask. */
+    private static final long LONG_LOWEST_BYTE_MASK = 0xffL;
+    /** Number of bytes in a {@code long} */
+    private static final int LONG_SIZE = 8;
+    /** Lowest byte mask. */
+    private static final int INT_LOWEST_BYTE_MASK = 0xff;
+    /** Number of bytes in a {@code int} */
+    private static final int INT_SIZE = 4;
+
+    /**
+     * Class contains only static methods.
+     */
+    private NumberFactory() {}
+
+    /**
+     * @param v Number.
+     * @return a boolean.
+     */
+    public static boolean makeBoolean(int v) {
+        return (v >>> 31) != 0;
+    }
+
+    /**
+     * @param v Number.
+     * @return a boolean.
+     */
+    public static boolean makeBoolean(long v) {
+        return (v >>> 63) != 0;
+    }
+
+    /**
+     * @param v Number.
+     * @return a {@code double} value in the interval {@code [0, 1]}.
+     */
+    public static double makeDouble(long v) {
+        // http://xorshift.di.unimi.it
+        return Double.longBitsToDouble(DOUBLE_HIGH_BITS | v >>> 12) - 1d;
+    }
+
+    /**
+     * @param v Number (high order bits).
+     * @param w Number (low order bits).
+     * @return a {@code double} value in the interval {@code [0, 1]}.
+     */
+    public static double makeDouble(int v,
+                                    int w) {
+        final long high = ((long) (v >>> 6)) << 26;
+        final int low = w >>> 6;
+        return (high | low) * DOUBLE_MULTIPLIER;
+    }
+
+    /**
+     * @param v Number.
+     * @return a {@code float} value in the interval {@code [0, 1]}.
+     */
+    public static float makeFloat(int v) {
+        return (v >>> 9) * FLOAT_MULTIPLIER;
+    }
+
+    /**
+     * @param v Number (high order bits).
+     * @param w Number (low order bits).
+     * @return a {@code long} value.
+     */
+    public static long makeLong(int v,
+                                int w) {
+        return (((long) v) << 32) | (w & 0xffffffffL);
+    }
+
+    /**
+     * Creates an {@code int} from a {@code long}.
+     *
+     * @param v Number.
+     * @return an {@code int} value made from the "xor" of the
+     * {@link #extractHi(long) high order bits} and
+     * {@link #extractLo(long) low order bits} of {@code v}.
+     */
+    public static int makeInt(long v) {
+        return extractHi(v) ^ extractLo(v);
+    }
+
+    /**
+     * Creates an {@code int} from a {@code long}, using the high order bits.
+     * <p>
+     * The returned value is such that if
+     * <pre><code>
+     *  vL = extractLo(v);
+     *  vH = extractHi(v);
+     * </code></pre>
+     * then {@code v} is equal to {@link #makeLong(int,int) makeLong(vH, vL)}.
+     * </p>
+     *
+     * @param v Number.
+     * @return an {@code int} value made from the most significant bits
+     * of {@code v}.
+     */
+    public static int extractHi(long v) {
+        return (int) (v >>> 32);
+    }
+
+    /**
+     * Creates an {@code int} from a {@code long}, using the low order bits.
+     * <p>
+     * The returned value is such that if
+     * <pre><code>
+     *  vL = extractLo(v);
+     *  vH = extractHi(v);
+     * </code></pre>
+     * then {@code v} is equal to {@link #makeLong(int,int) makeLong(vH, vL)}.
+     * </p>
+     *
+     * @param v Number.
+     * @return an {@code int} value made from the least significant bits
+     * of {@code v}.
+     */
+    public static int extractLo(long v) {
+        return (int) v;
+    }
+
+    /**
+     * Splits a {@code long} into 8 bytes.
+     *
+     * @param v Value.
+     * @return the bytes that compose the given value (least-significant
+     * byte first).
+     */
+    public static byte[] makeByteArray(long v) {
+        final byte[] b = new byte[LONG_SIZE];
+
+        for (int i = 0; i < LONG_SIZE; i++) {
+            final int shift = i * 8;
+            b[i] = (byte) ((v >>> shift) & LONG_LOWEST_BYTE_MASK);
+        }
+
+        return b;
+    }
+
+    /**
+     * Creates a {@code long} from 8 bytes.
+     *
+     * @param input Input.
+     * @return the value that correspond to the given bytes assuming
+     * that the is ordered in increasing byte significance (i.e. the
+     * first byte in the array is the least-siginficant).
+     * @throws IllegalArgumentException if {@code input.length != 8}.
+     */
+    public static long makeLong(byte[] input) {
+        checkSize(LONG_SIZE, input.length);
+
+        long v = 0;
+        for (int i = 0; i < LONG_SIZE; i++) {
+            final int shift = i * 8;
+            v |= (((long) input[i]) & LONG_LOWEST_BYTE_MASK) << shift;
+        }
+
+        return v;
+    }
+
+    /**
+     * Splits an array of {@code long} values into a sequence of bytes.
+     * This method calls {@link #makeByteArray(long)} for each element of
+     * the {@code input}.
+     *
+     * @param input Input.
+     * @return an array of bytes.
+     */
+    public static byte[] makeByteArray(long[] input) {
+        final int size = input.length * LONG_SIZE;
+        final byte[] b = new byte[size];
+
+        for (int i = 0; i < input.length; i++) {
+            final byte[] current = makeByteArray(input[i]);
+            System.arraycopy(current, 0, b, i * LONG_SIZE, LONG_SIZE);
+        }
+
+        return b;
+    }
+
+    /**
+     * Creates an array of {@code long} values from a sequence of bytes.
+     * This method calls {@link #makeLong(byte[])} for each subsequence
+     * of 8 bytes.
+     *
+     * @param input Input.
+     * @return an array of {@code long}.
+     * @throws IllegalArgumentException if {@code input.length} is not
+     * a multiple of 8.
+     */
+    public static long[] makeLongArray(byte[] input) {
+        final int size = input.length;
+        final int num = size / LONG_SIZE;
+        checkSize(num * LONG_SIZE, size);
+
+        final long[] output = new long[num];
+        for (int i = 0; i < num; i++) {
+            final int from = i * LONG_SIZE;
+            final byte[] current = Arrays.copyOfRange(input, from, from + LONG_SIZE);
+            output[i] = makeLong(current);
+        }
+
+        return output;
+    }
+
+    /**
+     * Splits an {@code int} into 4 bytes.
+     *
+     * @param v Value.
+     * @return the bytes that compose the given value (least-significant
+     * byte first).
+     */
+    public static byte[] makeByteArray(int v) {
+        final byte[] b = new byte[INT_SIZE];
+
+        for (int i = 0; i < INT_SIZE; i++) {
+            final int shift = i * 8;
+            b[i] = (byte) ((v >>> shift) & INT_LOWEST_BYTE_MASK);
+        }
+
+        return b;
+    }
+
+    /**
+     * Creates an {@code int} from 4 bytes.
+     *
+     * @param input Input.
+     * @return the value that correspond to the given bytes assuming
+     * that the is ordered in increasing byte significance (i.e. the
+     * first byte in the array is the least-siginficant).
+     * @throws IllegalArgumentException if {@code input.length != 4}.
+     */
+    public static int makeInt(byte[] input) {
+        checkSize(INT_SIZE, input.length);
+
+        int v = 0;
+        for (int i = 0; i < INT_SIZE; i++) {
+            final int shift = i * 8;
+            v |= (((int) input[i]) & INT_LOWEST_BYTE_MASK) << shift;
+        }
+
+        return v;
+    }
+
+    /**
+     * Splits an array of {@code int} values into a sequence of bytes.
+     * This method calls {@link #makeByteArray(int)} for each element of
+     * the {@code input}.
+     *
+     * @param input Input.
+     * @return an array of bytes.
+     */
+    public static byte[] makeByteArray(int[] input) {
+        final int size = input.length * INT_SIZE;
+        final byte[] b = new byte[size];
+
+        for (int i = 0; i < input.length; i++) {
+            final byte[] current = makeByteArray(input[i]);
+            System.arraycopy(current, 0, b, i * INT_SIZE, INT_SIZE);
+        }
+
+        return b;
+    }
+
+    /**
+     * Creates an array of {@code int} values from a sequence of bytes.
+     * This method calls {@link #makeInt(byte[])} for each subsequence
+     * of 4 bytes.
+     *
+     * @param input Input. Length must be a multiple of 4.
+     * @return an array of {@code int}.
+     * @throws IllegalArgumentException if {@code input.length} is not
+     * a multiple of 4.
+     */
+    public static int[] makeIntArray(byte[] input) {
+        final int size = input.length;
+        final int num = size / INT_SIZE;
+        checkSize(num * INT_SIZE, size);
+
+        final int[] output = new int[num];
+        for (int i = 0; i < num; i++) {
+            final int from = i * INT_SIZE;
+            final byte[] current = Arrays.copyOfRange(input, from, from + INT_SIZE);
+            output[i] = makeInt(current);
+        }
+
+        return output;
+    }
+
+    /**
+     * @param expected Expected value.
+     * @param actual Actual value.
+     * @throw IllegalArgumentException if {@code expected != actual}.
+     */
+    private static void checkSize(int expected,
+                                  int actual) {
+        if (expected != actual) {
+            throw new IllegalArgumentException("Array size: Expected " + expected +
+                                               " but was " + actual);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/SeedConverter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/SeedConverter.java b/src/main/java/org/apache/commons/rng/internal/util/SeedConverter.java
new file mode 100644
index 0000000..e884b16
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/SeedConverter.java
@@ -0,0 +1,35 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Seed converter.
+ *
+ * @param <IN> Input seed type.
+ * @param <OUT> Output seed type.
+ *
+ * @since 4.0
+ */
+public interface SeedConverter<IN, OUT> {
+    /**
+     * Converts seed from input type to output type.
+     *
+     * @param seed Original seed value.
+     * @return the converted seed value.
+     */
+    OUT convert(IN seed);
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/SeedConverterComposer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/SeedConverterComposer.java b/src/main/java/org/apache/commons/rng/internal/util/SeedConverterComposer.java
new file mode 100644
index 0000000..7c463b8
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/SeedConverterComposer.java
@@ -0,0 +1,56 @@
+/*
+ * 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.internal.util;
+
+/**
+ * Composes two {@link SeedConverter converters}.
+ *
+ * @param <IN> Input seed type.
+ * @param <TRANS> Transitional seed type.
+ * @param <OUT> Output seed type.
+ *
+ * @since 4.0
+ */
+public class SeedConverterComposer<IN, TRANS, OUT> implements SeedConverter<IN, OUT> {
+    /** First conversion. */
+    private SeedConverter<IN, TRANS> first;
+    /** Second conversion. */
+    private SeedConverter<TRANS, OUT> second;
+
+    /**
+     * @param first First conversion.
+     * @param second second conversion.
+     */
+    public SeedConverterComposer(SeedConverter<IN, TRANS> first,
+                                 SeedConverter<TRANS, OUT> second) {
+        this.first = first;
+        this.second = second;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public OUT convert(IN seed) {
+        final TRANS trans = first.convert(seed);
+        return second.convert(trans);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " (" + second + " o " + first + ")";
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/SeedFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/SeedFactory.java b/src/main/java/org/apache/commons/rng/internal/util/SeedFactory.java
new file mode 100644
index 0000000..e02712c
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/SeedFactory.java
@@ -0,0 +1,262 @@
+/*
+ * 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.internal.util;
+
+import org.apache.commons.rng.internal.source32.RandomIntSource;
+import org.apache.commons.rng.internal.source32.Well44497b;
+import org.apache.commons.rng.internal.source64.RandomLongSource;
+import org.apache.commons.rng.internal.source64.SplitMix64;
+
+/**
+ * Utilities related to seeding.
+ *
+ * <p>
+ * This class provides methods to generate random seeds (single values
+ * or arrays of values, of {@code int} or {@code long} types) that can
+ * be passed to the {@link org.apache.commons.rng.RandomSource
+ * methods that create a generator instance}.
+ * <br>
+ * Although the seed-generating methods defined in this class will likely
+ * return different values for all calls, there is no guarantee that the
+ * produced seed will result always in a "good" sequence of numbers (even
+ * if the generator initialized with that seed is good).
+ * <br>
+ * There is <i>no guarantee</i> that sequences will not overlap.
+ * </p>
+ *
+ * @since 4.0
+ */
+public class SeedFactory {
+    /** Generator with a long period. */
+    private static final RandomIntSource SEED_GENERATOR;
+
+    static {
+        // Another RNG for initializing the "SEED_GENERATOR".
+        final long t = System.currentTimeMillis();
+        final int h = System.identityHashCode(Runtime.getRuntime());
+        final SplitMix64 rng = new SplitMix64(t ^ NumberFactory.makeLong(h, ~h));
+
+        final int blockCount = 1391; // Size of the state array of "Well44497b".
+        SEED_GENERATOR = new Well44497b(createIntArray(blockCount, rng));
+    }
+
+    /**
+     * Class contains only static methods.
+     */
+    private SeedFactory() {}
+
+    /**
+     * Creates a number for use as a seed.
+     *
+     * @return a random number.
+     */
+    public static int createInt() {
+        return createInt(SEED_GENERATOR, System.identityHashCode(new Object()));
+    }
+
+    /**
+     * Creates a number for use as a seed.
+     *
+     * @return a random number.
+     */
+    public static long createLong() {
+        return createLong(SEED_GENERATOR, System.identityHashCode(new Object()));
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @return an array of {@code n} random numbers.
+     */
+    public static int[] createIntArray(int n) {
+        return createIntArray(n, SEED_GENERATOR, new Object());
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @return an array of {@code n} random numbers.
+     */
+    public static long[] createLongArray(int n) {
+        return createLongArray(n, SEED_GENERATOR, new Object());
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @return an array of {@code n} random numbers drawn from the
+     * {@code source}.
+     */
+    static long[] createLongArray(int n,
+                                  RandomIntSource source) {
+        return createLongArray(n, source, null);
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @return an array of {@code n} random numbers drawn from the
+     * {@code source}.
+     */
+    static int[] createIntArray(int n,
+                                RandomLongSource source) {
+        return createIntArray(n, source, null);
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @return an array of {@code n} random numbers drawn from the
+     * {@code source}.
+     */
+    static int[] createIntArray(int n,
+                                RandomIntSource source) {
+        return createIntArray(n, source, null);
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @param h Arbitrary object whose {@link System#identityHashCode(Object)
+     * hash code} will be combined with the next number drawn from
+     * the {@code source}.
+     * @return an array of {@code n} random numbers.
+     */
+    private static long[] createLongArray(int n,
+                                          RandomIntSource source,
+                                          Object h) {
+        final long[] array = new long[n];
+
+        final int hash = System.identityHashCode(h);
+        for (int i = 0; i < n; i++) {
+            array[i] = createLong(source, hash);
+        }
+
+        return array;
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @param h Arbitrary object whose {@link System#identityHashCode(Object)
+     * hash code} will be combined with the next number drawn from
+     * the {@code source}.
+     * @return an array of {@code n} random numbers.
+     */
+    private static int[] createIntArray(int n,
+                                        RandomLongSource source,
+                                        Object h) {
+        final int[] array = new int[n];
+
+        final int hash = System.identityHashCode(h);
+        for (int i = 0; i < n; i += 2) {
+            final long v = createLong(source, hash);
+
+            array[i] = NumberFactory.extractHi(v);
+
+            if (i + 1 < n) {
+                array[i + 1] = NumberFactory.extractLo(v);
+            }
+        }
+
+        return array;
+    }
+
+    /**
+     * Creates an array of numbers for use as a seed.
+     *
+     * @param n Size of the array to create.
+     * @param source Source of randomness.
+     * @param h Arbitrary object whose {@link System#identityHashCode(Object)
+     * hash code} will be combined with the next number drawn from
+     * the {@code source}.
+     * @return an array of {@code n} random numbers.
+     */
+    private static int[] createIntArray(int n,
+                                        RandomIntSource source,
+                                        Object h) {
+        final int[] array = new int[n];
+
+        final int hash = System.identityHashCode(h);
+        for (int i = 0; i < n; i++) {
+            array[i] = createInt(source, hash);
+        }
+
+        return array;
+    }
+
+    /**
+     * Creates a random number by performing an "xor" between the
+     * next value in the sequence of the {@code source} and the
+     * given {@code number}.
+     *
+     * @param source Source of randomness.
+     * @param number Arbitrary number.
+     * @return a random number.
+     */
+    private static long createLong(RandomLongSource source,
+                                   int number) {
+        synchronized (source) {
+            return source.next() ^ NumberFactory.makeLong(number, number);
+        }
+    }
+
+    /**
+     * Creates a random number by performing an "xor" between the
+     * the next value in the sequence of the {@code source} and the
+     * given {@code number}.
+     *
+     * @param source Source of randomness.
+     * @param number Arbitrary number.
+     * @return a random number.
+     */
+    private static long createLong(RandomIntSource source,
+                                   int number) {
+        synchronized (source) {
+            return NumberFactory.makeLong(source.next() ^ number,
+                                          source.next() ^ number);
+        }
+    }
+
+    /**
+     * Creates a random number by performing an "xor" between the
+     * next value in the sequence of the {@code source} and the
+     * given {@code number}.
+     *
+     * @param source Source of randomness.
+     * @param number Arbitrary number.
+     * @return a random number.
+     */
+    private static int createInt(RandomIntSource source,
+                                 int number) {
+        synchronized (source) {
+            return source.next() ^ number;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/internal/util/package-info.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/internal/util/package-info.java b/src/main/java/org/apache/commons/rng/internal/util/package-info.java
new file mode 100644
index 0000000..662dd2e
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/internal/util/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+
+/**
+ * Utilities for seed conversion.
+ */
+
+package org.apache.commons.rng.internal.util;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/main/java/org/apache/commons/rng/package-info.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/rng/package-info.java b/src/main/java/org/apache/commons/rng/package-info.java
new file mode 100644
index 0000000..7218099
--- /dev/null
+++ b/src/main/java/org/apache/commons/rng/package-info.java
@@ -0,0 +1,95 @@
+/*
+ * 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>Randomness Providers</h3>
+ *
+ * <p>
+ * This package contains the public API for generating sequences of
+ * pseudo-random numbers that are <i>uniformly distributed</i> in a
+ * specified range.
+ * <br>
+ * All implemented generators can be instantiated through
+ * {@link org.apache.commons.rng.RandomSource factory methods}.
+ * The low-level classes, that define how the randomness is produced,
+ * are implemented in package {@link org.apache.commons.rng.internal}
+ * and its sub-packages, but should not be used directly.
+ * <br>
+ * The generators are <i>not</i> thread-safe: Parallel applications must
+ * use different generator instances in different threads.
+ * </p>
+ *
+ * <p>
+ * In the case of pseudo-random generators, the source of randomness is
+ * usually a set of numbers whose bits representation are scrambled in such
+ * a way as to produce a random-looking sequence.
+ * <br>
+ * The main property of the sequence is that the numbers must be uniformly
+ * distributed within their allowed range.
+ * <br>
+ * Classes in this package do not provide any further processing of the
+ * number generation such as to match other types of distribution.
+ * </p>
+ *
+ * <p>
+ * Which source of randomness to choose may depend on which properties
+ * are more important.
+ * Considerations can include speed of generation, memory usage, period
+ * size, equidistribution, correlation, etc.
+ * <br>
+ * For some of the generators, interesting properties (of the reference
+ * implementations) are proven in scientific papers.
+ * Some generators can also suffer from potential weaknesses.
+ * </p>
+ *
+ * <p>
+ * For simple sampling, any of the generators implemented in this library
+ * may be sufficient.
+ * <br>
+ * For Monte-Carlo simulations that require generating high-dimensional
+ * vectors), equidistribution and non-correlation are crucial.
+ * The <i>Mersenne Twister</i> and <i>Well</i> generators have
+ * equidistribution properties proven according to their bits pool size
+ * which is directly related to their period (all of them have maximal
+ * period, i.e. a generator with size {@code n} pool has a period
+ * <code>2<sup>n</sup>-1</code>).
+ * They also have equidistribution properties for 32 bits blocks up to
+ * {@code s/32} dimension where {@code s} is their pool size.
+ * <br>
+ * For example, {@code Well19937c} is equidistributed up to dimension 623
+ * (i.e. 19937 divided by 32).
+ * It means that a Monte-Carlo simulation generating vectors of {@code n}
+ * (32-bits integer) variables at each iteration has some guarantee on the
+ * properties of its components as long as {@code n < 623}.
+ * Note that if the variables are of type {@code double}, the limit is
+ * divided by two (since 64 bits are needed to create a {@code double}).
+ * <br>
+ * Reference to the relevant publications are listed in the specific
+ * documentation of each class.
+ * </p>
+ *
+ * <p>
+ * Memory usage can vary a lot between providers.
+ * The state of {@code MersenneTwister} is composed of 624 integers,
+ * using about 2.5 kB.
+ * The <i>Well</i> generators use 6 integer arrays, the length of each
+ * being equal to the pool size; thus, for example, {@code Well44497b}
+ * uses about 33 kB.
+ * </p>
+ */
+
+package org.apache.commons.rng;

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/site/apt/userguide/rng.apt
----------------------------------------------------------------------
diff --git a/src/site/apt/userguide/rng.apt b/src/site/apt/userguide/rng.apt
new file mode 100644
index 0000000..a5da792
--- /dev/null
+++ b/src/site/apt/userguide/rng.apt
@@ -0,0 +1,244 @@
+~~
+~~ 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.
+~~
+
+  -----------------------------
+  The Commons Rng User Guide
+  -----------------------------
+
+1. Usage overview
+
+  The <<<rng>>> package contains the random number generation functionality.
+  Please refer to the {{{../apidocs/index.html}Javadoc}} for details.
+
+
+2. Library layout
+
+
+3. Performance
+
+  This section reports benchmarks of the RNG implementations.
+  All runs were performed on a platform with the following characteristics:
+
+  * CPU: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
+
+  * Java runtime: 1.7.0_95-b00
+
+  * JVM: OpenJDK 64-Bit Server VM 24.95-b01
+
+  []
+
+  The following tables indicates the performance for generating
+
+  * a sequence of 32-bits integers (a.k.a. Java type <<<int>>>)
+
+  * a sequence of 64-bits integers (a.k.a. Java type <<<long>>>)
+
+  * a sequence of 64-bits floating point numbers (a.k.a. Java type <<<double>>>)
+
+  []
+
+  The first column is the RNG identifier (see {{{../apidocs/org/apache/commons/rng/RandomSource.html}RandomSource}}).
+  
+  Two independent benchmarking tools were used:
+
+  * Commons Math <<<PerfTestUtils>>>
+
+  * {{{http://openjdk.java.net/projects/code-tools/jmh/}JMH}}
+
+  []
+  
+  The results of those tools are reported in second and third columns, respectively, where
+  the value is the ratio of the performance of the implementation with respect to the 
+  corresponding performance of the JDK's <<<java.util.Random>>> class.
+  In these tables, <lower> is <better>.
+
+
+
+  ** Generating <<<int>>> values
+
+
+*---------------------------------*------------------------+--------------+
+|| RNG identifier             || Ratio (PerfTestUtils) || Ratio (JMH) |
+*---------------------------------*------------------------+--------------+
+| JDK         | 1.21                   | 1.000        |
+*---------------------------------*------------------------+--------------+
+| MT   | 1.19                   | 0.639        |
+*---------------------------------*------------------------+--------------+
+| WELL_512_A          | 1.33                   | 0.740        |
+*---------------------------------*------------------------+--------------+
+| WELL_1024_A         | 1.38                   | 0.795        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_A        | 1.47                   | 1.039        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_C        | 1.54                   | 1.102        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_A        | 1.53                   | 1.187        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_B        | 1.59                   | 1.114        |
+*---------------------------------*------------------------+--------------+
+| ISAAC       | 1.30                   | 0.610        |
+*---------------------------------*------------------------+--------------+
+| MT_64 | 1.31                   | 0.734        |
+*---------------------------------*------------------------+--------------+
+| SPLIT_MIX_64        | 1.00                   | 0.361        |
+*---------------------------------*------------------------+--------------+
+| XOR_SHIFT_1024_S  | 1.09                   | 0.450        |
+*---------------------------------*------------------------+--------------+
+| TWO_CMRES          | 1.14                   | 0.464        |
+*---------------------------------*------------------------+--------------+
+
+
+
+  ** Generating <<<long>>> values
+
+
+*---------------------------------*------------------------+--------------+
+|| RNG identifier             || Ratio (PerfTestUtils) || Ratio (JMH) |
+*---------------------------------*------------------------+--------------+
+| JDK         | 1.40                   | 1.002        |
+*---------------------------------*------------------------+--------------+
+| MT   | 0.85                   | 0.569        |
+*---------------------------------*------------------------+--------------+
+| WELL_512_A          | 1.05                   | 0.798        |
+*---------------------------------*------------------------+--------------+
+| WELL_1024_A         | 1.08                   | 0.873        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_A        | 1.21                   | 0.968        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_C        | 1.27                   | 1.020        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_A        | 1.26                   | 1.103        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_B        | 1.31                   | 1.043        |
+*---------------------------------*------------------------+--------------+
+| ISAAC       | 0.96                   | 0.515        |
+*---------------------------------*------------------------+--------------+
+| MT_64 | 0.67                   | 0.343        |
+*---------------------------------*------------------------+--------------+
+| SPLIT_MIX_64        | 0.55                   | 0.175        |
+*---------------------------------*------------------------+--------------+
+| XOR_SHIFT_1024_S  | 0.59                   | 0.207        |
+*---------------------------------*------------------------+--------------+
+| TWO_CMRES          | 0.61                   | 0.223        |
+*---------------------------------*------------------------+--------------+
+
+
+
+  ** Generating <<<double>>> values
+
+
+*---------------------------------*------------------------+--------------+
+|| RNG identifier             || Ratio (PerfTestUtils) || Ratio (JMH) |
+*---------------------------------*------------------------+--------------+
+| JDK         | 1.15                   | 1.001        |
+*---------------------------------*------------------------+--------------+
+| MT   | 0.86                   | 0.614        |
+*---------------------------------*------------------------+--------------+
+| WELL_512_A          | 1.08                   | 0.839        |
+*---------------------------------*------------------------+--------------+
+| WELL_1024_A         | 1.11                   | 0.899        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_A        | 1.23                   | 0.984        |
+*---------------------------------*------------------------+--------------+
+| WELL_19937_C        | 1.29                   | 1.069        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_A        | 1.28                   | 1.125        |
+*---------------------------------*------------------------+--------------+
+| WELL_44497_B        | 1.33                   | 1.093        |
+*---------------------------------*------------------------+--------------+
+| ISAAC       | 0.98                   | 0.583        |
+*---------------------------------*------------------------+--------------+
+| MT_64 | 0.66                   | 0.391        |
+*---------------------------------*------------------------+--------------+
+| SPLIT_MIX_64        | 0.57                   | 0.226        |
+*---------------------------------*------------------------+--------------+
+| XOR_SHIFT_1024_S  | 0.59                   | 0.262        |
+*---------------------------------*------------------------+--------------+
+| TWO_CMRES          | 0.60                   | 0.284        |
+*---------------------------------*------------------------+--------------+
+
+
+4. Quality
+
+  This section reports results of performing "stress tests" that aim at detecting failures
+  of an implementation to produce sequences of numbers that follow a uniform distribution.
+
+  Two different test suites were used:
+
+  * {{{http://www.phy.duke.edu/~rgb/General/dieharder.php}Dieharder}}
+
+  * {{{http://simul.iro.umontreal.ca/testu01/tu01.html}TestU01}}
+
+  []
+
+  The first column is the RNG identifier (see {{{../apidocs/org/apache/commons/rng/RandomSource.html}RandomSource}}).
+  The second and third columns contain the number of tests which <Dieharder> and <TestU01>
+  respectively reported as below the accepted threshold for considering the sequence as
+  uniformly random; hence, in this table, <lower> is <better>.
+
+  For each the two test suites, two runs were performed (using random seeds): Click on one
+  of the numbers of the comma-separated list in order to see the text report of the
+  corresponding run.
+  Note: For <Dieharder>, a failure on the "Diehard Sums Test" can be {{{http://www.phy.duke.edu/~rgb/General/dieharder.php}ignored}}.
+
+
+*---------------------------------*----------------*---------------------*
+|| RNG identifier             || Dieharder     || TestU01 (BigCrush) |
+*----------------*----------------*----------------*---------------------*
+| JDK         | {{{../txt/userguide/rng/stress/dh/run_1/dh_1}13}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_1}11}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_1}77}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_1}74}} |
+*---------------------------------*----------------*----------------*
+| MT   | {{{../txt/userguide/rng/stress/dh/run_1/dh_2}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_2}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_2}2}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_2}2}} |
+*---------------------------------*----------------*----------------*
+| WELL_512_A          | {{{../txt/userguide/rng/stress/dh/run_1/dh_3}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_3}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_3}6}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_3}7}} |
+*---------------------------------*----------------*----------------*
+| WELL_1024_A         | {{{../txt/userguide/rng/stress/dh/run_1/dh_4}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_4}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_4}5}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_4}4}} |
+*---------------------------------*----------------*----------------*
+| WELL_19937_A        | {{{../txt/userguide/rng/stress/dh/run_1/dh_5}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_5}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_5}3}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_5}3}} |
+*---------------------------------*----------------*----------------*
+| WELL_19937_C        | {{{../txt/userguide/rng/stress/dh/run_1/dh_6}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_6}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_6}3}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_6}2}} |
+*---------------------------------*----------------*----------------*
+| WELL_44497_A        | {{{../txt/userguide/rng/stress/dh/run_1/dh_7}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_7}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_7}2}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_7}2}} |
+*---------------------------------*----------------*----------------*
+| WELL_44497_B        | {{{../txt/userguide/rng/stress/dh/run_1/dh_8}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_8}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_8}3}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_8}2}} |
+*---------------------------------*----------------*----------------*
+| ISAAC       | {{{../txt/userguide/rng/stress/dh/run_1/dh_9}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_9}1}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_9}1}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_9}0}} |
+*---------------------------------*----------------*----------------*
+| MT_64 | {{{../txt/userguide/rng/stress/dh/run_1/dh_10}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_10}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_10}2}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_10}2}} |
+*---------------------------------*----------------*----------------*
+| SPLIT_MIX_64        | {{{../txt/userguide/rng/stress/dh/run_1/dh_11}1}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_11}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_11}0}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_11}0}} |
+*---------------------------------*----------------*----------------*
+| XOR_SHIFT_1024_S  | {{{../txt/userguide/rng/stress/dh/run_1/dh_12}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_12}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_12}2}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_12}0}} |
+*---------------------------------*----------------*----------------*
+| TWO_CMRES          | {{{../txt/userguide/rng/stress/dh/run_1/dh_13}0}}, {{{../txt/userguide/rng/stress/dh/run_2/dh_13}0}} | {{{../txt/userguide/rng/stress/tu/run_1/tu_13}1}}, {{{../txt/userguide/rng/stress/tu/run_2/tu_13}0}} |
+*---------------------------------*----------------*----------------*
+
+
+5. Dependencies
+
+  Commons Rng requires JDK 1.5+ and has no runtime dependencies.
+
+6. License
+
+  Commons Rng is distributed under the terms of the
+  {{{http://www.apache.org/licenses/LICENSE-2.0}Apache License, Version 2.0}}.
+
+  This product includes software developed by other third parties and
+  distributed under licenses terms compatible with Apache License, Version 2.0.
+  All the licenses of such third parties products are available in the distribution
+  in the LICENSE.txt file. Some products require additional attribution, these
+  attributions can be found in the NOTICE.txt file. These files are available
+  both in the source packages and in the binaries distribution jar files.

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/site/resources/images/commons_rng.png
----------------------------------------------------------------------
diff --git a/src/site/resources/images/commons_rng.png b/src/site/resources/images/commons_rng.png
new file mode 100644
index 0000000..1005119
Binary files /dev/null and b/src/site/resources/images/commons_rng.png differ

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/site/resources/profile.jacoco
----------------------------------------------------------------------
diff --git a/src/site/resources/profile.jacoco b/src/site/resources/profile.jacoco
new file mode 100644
index 0000000..a12755f
--- /dev/null
+++ b/src/site/resources/profile.jacoco
@@ -0,0 +1,17 @@
+# 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.
+# -----------------------------------------------------------------------------
+#
+# Empty file used to automatically trigger JaCoCo profile from commons parent pom

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/site/resources/style/project.css
----------------------------------------------------------------------
diff --git a/src/site/resources/style/project.css b/src/site/resources/style/project.css
new file mode 100644
index 0000000..bd137e4
--- /dev/null
+++ b/src/site/resources/style/project.css
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
+
+@import url("http://commons.apache.org/style/commons-maven.css");

http://git-wip-us.apache.org/repos/asf/commons-rng/blob/c0495bf2/src/site/resources/txt/userguide/stress/dh/run_1/dh_1
----------------------------------------------------------------------
diff --git a/src/site/resources/txt/userguide/stress/dh/run_1/dh_1 b/src/site/resources/txt/userguide/stress/dh/run_1/dh_1
new file mode 100644
index 0000000..224d2a0
--- /dev/null
+++ b/src/site/resources/txt/userguide/stress/dh/run_1/dh_1
@@ -0,0 +1,146 @@
+# 
+# RNG: org.apache.commons.math4.rng.internal.source32.JDKRandom
+# 
+# Java: 1.8.0_66
+# Runtime: 1.8.0_66-b17
+# JVM: Java HotSpot(TM) 64-Bit Server VM 25.66-b17
+# OS: Linux 3.16.0-4-amd64 amd64
+# 
+# Analyzer: /usr/bin/dieharder -a -g 200 -Y 1 -k 2 
+# 
+#=============================================================================#
+#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #
+#=============================================================================#
+   rng_name    |rands/second|   Seed   |
+stdin_input_raw|  8.46e+06  |3234096741|
+#=============================================================================#
+        test_name   |ntup| tsamples |psamples|  p-value |Assessment
+#=============================================================================#
+   diehard_birthdays|   0|       100|     100|0.03946185|  PASSED  
+      diehard_operm5|   0|   1000000|     100|0.01629539|  PASSED  
+  diehard_rank_32x32|   0|     40000|     100|0.98579998|  PASSED  
+    diehard_rank_6x8|   0|    100000|     100|0.53483219|  PASSED  
+   diehard_bitstream|   0|   2097152|     100|0.99560702|   WEAK   
+   diehard_bitstream|   0|   2097152|     200|0.47019123|  PASSED  
+        diehard_opso|   0|   2097152|     100|0.58743463|  PASSED  
+        diehard_oqso|   0|   2097152|     100|0.00000000|  FAILED  
+         diehard_dna|   0|   2097152|     100|0.00000000|  FAILED  
+diehard_count_1s_str|   0|    256000|     100|0.90699558|  PASSED  
+diehard_count_1s_byt|   0|    256000|     100|0.97545849|  PASSED  
+ diehard_parking_lot|   0|     12000|     100|0.01296474|  PASSED  
+    diehard_2dsphere|   2|      8000|     100|0.51391418|  PASSED  
+    diehard_3dsphere|   3|      4000|     100|0.18584250|  PASSED  
+     diehard_squeeze|   0|    100000|     100|0.00726652|  PASSED  
+        diehard_sums|   0|       100|     100|0.40869228|  PASSED  
+        diehard_runs|   0|    100000|     100|0.05169565|  PASSED  
+        diehard_runs|   0|    100000|     100|0.98866390|  PASSED  
+       diehard_craps|   0|    200000|     100|0.35494552|  PASSED  
+       diehard_craps|   0|    200000|     100|0.47365191|  PASSED  
+ marsaglia_tsang_gcd|   0|  10000000|     100|0.14780252|  PASSED  
+ marsaglia_tsang_gcd|   0|  10000000|     100|0.29338446|  PASSED  
+         sts_monobit|   1|    100000|     100|0.97888201|  PASSED  
+            sts_runs|   2|    100000|     100|0.74655596|  PASSED  
+          sts_serial|   1|    100000|     100|0.41897552|  PASSED  
+          sts_serial|   2|    100000|     100|0.38034056|  PASSED  
+          sts_serial|   3|    100000|     100|0.99170185|  PASSED  
+          sts_serial|   3|    100000|     100|0.76457270|  PASSED  
+          sts_serial|   4|    100000|     100|0.80172413|  PASSED  
+          sts_serial|   4|    100000|     100|0.52177712|  PASSED  
+          sts_serial|   5|    100000|     100|0.99297019|  PASSED  
+          sts_serial|   5|    100000|     100|0.59183271|  PASSED  
+          sts_serial|   6|    100000|     100|0.94001454|  PASSED  
+          sts_serial|   6|    100000|     100|0.39218216|  PASSED  
+          sts_serial|   7|    100000|     100|0.69888838|  PASSED  
+          sts_serial|   7|    100000|     100|0.16541368|  PASSED  
+          sts_serial|   8|    100000|     100|0.47131229|  PASSED  
+          sts_serial|   8|    100000|     100|0.09817778|  PASSED  
+          sts_serial|   9|    100000|     100|0.42261781|  PASSED  
+          sts_serial|   9|    100000|     100|0.05344107|  PASSED  
+          sts_serial|  10|    100000|     100|0.77804588|  PASSED  
+          sts_serial|  10|    100000|     100|0.57799732|  PASSED  
+          sts_serial|  11|    100000|     100|0.01016312|  PASSED  
+          sts_serial|  11|    100000|     100|0.06073112|  PASSED  
+          sts_serial|  12|    100000|     100|0.65917138|  PASSED  
+          sts_serial|  12|    100000|     100|0.63230695|  PASSED  
+          sts_serial|  13|    100000|     100|0.84190399|  PASSED  
+          sts_serial|  13|    100000|     100|0.85277783|  PASSED  
+          sts_serial|  14|    100000|     100|0.49213152|  PASSED  
+          sts_serial|  14|    100000|     100|0.30112917|  PASSED  
+          sts_serial|  15|    100000|     100|0.14544079|  PASSED  
+          sts_serial|  15|    100000|     100|0.94737293|  PASSED  
+          sts_serial|  16|    100000|     100|0.39262889|  PASSED  
+          sts_serial|  16|    100000|     100|0.84185055|  PASSED  
+         rgb_bitdist|   1|    100000|     100|0.54063417|  PASSED  
+         rgb_bitdist|   2|    100000|     100|0.09286365|  PASSED  
+         rgb_bitdist|   3|    100000|     100|0.27436056|  PASSED  
+         rgb_bitdist|   4|    100000|     100|0.10595606|  PASSED  
+         rgb_bitdist|   5|    100000|     100|0.72828807|  PASSED  
+         rgb_bitdist|   6|    100000|     100|0.78439941|  PASSED  
+         rgb_bitdist|   7|    100000|     100|0.54939794|  PASSED  
+         rgb_bitdist|   8|    100000|     100|0.49285600|  PASSED  
+         rgb_bitdist|   9|    100000|     100|0.55836635|  PASSED  
+         rgb_bitdist|  10|    100000|     100|0.09735886|  PASSED  
+         rgb_bitdist|  11|    100000|     100|0.99987371|   WEAK   
+         rgb_bitdist|  11|    100000|     200|0.72189984|  PASSED  
+         rgb_bitdist|  12|    100000|     100|0.16961094|  PASSED  
+rgb_minimum_distance|   2|     10000|    1000|0.20393701|  PASSED  
+rgb_minimum_distance|   3|     10000|    1000|0.00000002|  FAILED  
+rgb_minimum_distance|   4|     10000|    1000|0.00000000|  FAILED  
+rgb_minimum_distance|   5|     10000|    1000|0.00000000|  FAILED  
+    rgb_permutations|   2|    100000|     100|0.57021718|  PASSED  
+    rgb_permutations|   3|    100000|     100|0.62537216|  PASSED  
+    rgb_permutations|   4|    100000|     100|0.34391663|  PASSED  
+    rgb_permutations|   5|    100000|     100|0.51106315|  PASSED  
+      rgb_lagged_sum|   0|   1000000|     100|0.75921017|  PASSED  
+      rgb_lagged_sum|   1|   1000000|     100|0.11901881|  PASSED  
+      rgb_lagged_sum|   2|   1000000|     100|0.98766090|  PASSED  
+      rgb_lagged_sum|   3|   1000000|     100|0.59129144|  PASSED  
+      rgb_lagged_sum|   4|   1000000|     100|0.42126930|  PASSED  
+      rgb_lagged_sum|   5|   1000000|     100|0.28570675|  PASSED  
+      rgb_lagged_sum|   6|   1000000|     100|0.61879754|  PASSED  
+      rgb_lagged_sum|   7|   1000000|     100|0.44777033|  PASSED  
+      rgb_lagged_sum|   8|   1000000|     100|0.95714236|  PASSED  
+      rgb_lagged_sum|   9|   1000000|     100|0.55158775|  PASSED  
+      rgb_lagged_sum|  10|   1000000|     100|0.99968320|   WEAK   
+      rgb_lagged_sum|  10|   1000000|     200|0.94120047|  PASSED  
+      rgb_lagged_sum|  11|   1000000|     100|0.00001553|   WEAK   
+      rgb_lagged_sum|  11|   1000000|     200|0.00000000|  FAILED  
+      rgb_lagged_sum|  12|   1000000|     100|0.88935254|  PASSED  
+      rgb_lagged_sum|  13|   1000000|     100|0.76358163|  PASSED  
+      rgb_lagged_sum|  14|   1000000|     100|0.93169219|  PASSED  
+      rgb_lagged_sum|  15|   1000000|     100|0.00000000|  FAILED  
+      rgb_lagged_sum|  16|   1000000|     100|0.97118631|  PASSED  
+      rgb_lagged_sum|  17|   1000000|     100|0.94598742|  PASSED  
+      rgb_lagged_sum|  18|   1000000|     100|0.59454816|  PASSED  
+      rgb_lagged_sum|  19|   1000000|     100|0.00027545|   WEAK   
+      rgb_lagged_sum|  19|   1000000|     200|0.00000001|  FAILED  
+      rgb_lagged_sum|  20|   1000000|     100|0.87996908|  PASSED  
+      rgb_lagged_sum|  21|   1000000|     100|0.76558265|  PASSED  
+      rgb_lagged_sum|  22|   1000000|     100|0.35273627|  PASSED  
+      rgb_lagged_sum|  23|   1000000|     100|0.00007767|   WEAK   
+      rgb_lagged_sum|  23|   1000000|     200|0.00000000|  FAILED  
+      rgb_lagged_sum|  24|   1000000|     100|0.48030158|  PASSED  
+      rgb_lagged_sum|  25|   1000000|     100|0.98040339|  PASSED  
+      rgb_lagged_sum|  26|   1000000|     100|0.58094512|  PASSED  
+      rgb_lagged_sum|  27|   1000000|     100|0.26354148|  PASSED  
+      rgb_lagged_sum|  28|   1000000|     100|0.02516105|  PASSED  
+      rgb_lagged_sum|  29|   1000000|     100|0.19290606|  PASSED  
+      rgb_lagged_sum|  30|   1000000|     100|0.98500384|  PASSED  
+      rgb_lagged_sum|  31|   1000000|     100|0.00000000|  FAILED  
+      rgb_lagged_sum|  32|   1000000|     100|0.73025626|  PASSED  
+     rgb_kstest_test|   0|     10000|    1000|0.02497988|  PASSED  
+     dab_bytedistrib|   0|  51200000|       1|1.00000000|  FAILED  
+             dab_dct| 256|     50000|       1|0.92579052|  PASSED  
+Preparing to run test 207.  ntuple = 0
+        dab_filltree|  32|  15000000|       1|0.00000240|   WEAK   
+        dab_filltree|  32|  15000000|       1|0.00309996|   WEAK   
+        dab_filltree|  32|  15000000|     101|0.00000000|  FAILED  
+        dab_filltree|  32|  15000000|     101|0.00000000|  FAILED  
+Preparing to run test 208.  ntuple = 0
+       dab_filltree2|   0|   5000000|       1|0.24726392|  PASSED  
+       dab_filltree2|   1|   5000000|       1|0.74594891|  PASSED  
+Preparing to run test 209.  ntuple = 0
+        dab_monobit2|  12|  65000000|       1|0.66141319|  PASSED  
+# 
+# Test duration: 165.6195733010167 minutes
+# 


Mime
View raw message