| /* |
| * 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 org.apache.commons.rng.UniformRandomProvider; |
| import org.apache.commons.rng.simple.RandomSource; |
| |
| /** |
| * Encapsulate the data needed to create and test a random generator. This includes: |
| * |
| * <ul> |
| * <li>An identifier for the random source |
| * <li>The random source |
| * <li>The constructor arguments |
| * <li>The number of trials for each random source |
| * </ul> |
| */ |
| class StressTestData { |
| /** The identifier. */ |
| private final String id; |
| /** The random source. */ |
| private final RandomSource randomSource; |
| /** The arguments used to construct the random source. */ |
| private final Object[] args; |
| /** The number of trials. */ |
| private final int trials; |
| |
| /** |
| * Creates a new instance. |
| * |
| * @param randomSource The random source. |
| * @param args The arguments used to construct the random source (can be {@code null}). |
| */ |
| StressTestData(RandomSource randomSource, |
| Object[] args) { |
| // The default ID is defined by the enum order. |
| this(Integer.toString(randomSource.ordinal() + 1), |
| randomSource, |
| args, |
| // Ignore by default (trials = 0) any source that has arguments |
| args == null ? 1 : 0); |
| } |
| |
| /** |
| * Creates a new instance. |
| * |
| * @param id The identifier. |
| * @param randomSource The random source. |
| * @param args The arguments used to construct the random source (can be |
| * {@code null}). |
| * @param trials The number of trials. |
| */ |
| StressTestData(String id, |
| RandomSource randomSource, |
| Object[] args, |
| int trials) { |
| this.id = id; |
| this.randomSource = randomSource; |
| this.args = args; |
| this.trials = trials; |
| } |
| |
| /** |
| * Create a new instance with the given ID prefix prepended to the current ID. |
| * |
| * @param idPrefix The ID prefix. |
| * @return the stress test data |
| */ |
| StressTestData withIDPrefix(String idPrefix) { |
| return new StressTestData(idPrefix + id, randomSource, args, trials); |
| } |
| |
| /** |
| * Create a new instance with the given number of trials. |
| * |
| * @param numberOfTrials The number of trials. |
| * @return the stress test data |
| */ |
| StressTestData withTrials(int numberOfTrials) { |
| return new StressTestData(id, randomSource, args, numberOfTrials); |
| } |
| |
| /** |
| * Creates the random generator. |
| * |
| * <p>It is recommended the seed is generated using {@link RandomSource#createSeed()}.</p> |
| * |
| * @param seed the seed (use {@code null} to automatically create a seed) |
| * @return the uniform random provider |
| */ |
| UniformRandomProvider createRNG(byte[] seed) { |
| return RandomSource.create(randomSource, seed, args); |
| } |
| |
| /** |
| * Gets the identifier. |
| * |
| * @return the id |
| */ |
| String getId() { |
| return id; |
| } |
| |
| /** |
| * Gets the random source. |
| * |
| * @return the random source |
| */ |
| RandomSource getRandomSource() { |
| return randomSource; |
| } |
| |
| /** |
| * Gets the arguments used to construct the random source. |
| * |
| * @return the arguments |
| */ |
| Object[] getArgs() { |
| return args; |
| } |
| |
| /** |
| * Gets the number of trials. |
| * |
| * @return the number of trials |
| */ |
| int getTrials() { |
| return trials; |
| } |
| } |