[
https://issues.apache.org/jira/browse/RNG-57?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16643229#comment-16643229
]
Alex D Herbert commented on RNG-57:
-----------------------------------
bq. How would a single test detect which of the NumberFactory methods were
buggy?
The {{NumberFactory}} is used in the base implementation of
{{UniformRandomProvider}} by {{IntProvider}} or {{LongProvider}}. I suggested
that is tested once for all methods using e.g. SecureRandom as the source. No
need to test this for each provider.
It is also used in the save/restore state functions by each provider and that
will still be tested for each provider.
bq. Why not run locally?
No reason. Good catch.
I was thinking that it would be nice to collate results over a large number of
tests. However it would be better to do it once with a snapshot of the code.
Using results from Travis for each build will end up polluting the results over
time if code changes are made to the core providers.
My test for 1000 repeats of the test suite took about 4 hours on my laptop. So
it is easy to run overnight and get some reasonable statistics.
bq. Would you write it out in a new section of the user guide
OK. Sounds like tickets for the following:
- Improvement: Add details of RNG testing to the user guide. This outlines the
the aim of the test suite and provides a table of results for the number of
times each RNG provider fails. This can be run locally before a release, or
when the core module is updated.
- Improvement: Refactor the tests for the core module to allow use of random
seeds. Improve robustness of the tests using targeted testing of the random
sequence of each provider allowing the test to fail under given statistical
assumptions.
> CachedUniformRandomProvider for nextBoolean() and nextInt()
> -----------------------------------------------------------
>
> Key: RNG-57
> URL: https://issues.apache.org/jira/browse/RNG-57
> Project: Commons RNG
> Issue Type: Improvement
> Components: sampling
> Affects Versions: 1.2
> Reporter: Alex D Herbert
> Priority: Minor
> Labels: performance
>
> Implement a wrapper around a {{UniformRandomProvider}} that can cache the
> underlying source of random bytes for use in the methods {{nextBoolean()}}
> and {{nextInt()}} (in the case of {{LongProvider}}). E.g.
> {code:java}
> LongProvider provider = RandomSource.create(RandomSource.SPLIT_MIX_64);
> CachedLongProvider rng = new CachedLongProvider(provider);
> // Uses cached nextLong() 64 times
> rng.nextBoolean();
> // Uses cached nextLong() twice
> rng.nextInt();
> IntProvider provider = RandomSource.create(RandomSource.KISS);
> CachedIntProvider rng2 = new CachedIntProvider(provider);
> // Uses cached nextInt() 32 times
> rng2.nextBoolean();
> // This could be wrapped by a factory method:
> UniformRandomProvider rng = CachedUniformRandomProviderFactory.wrap(
> // Any supported source: IntProvider or LongProvider
> RandomSource.create(RandomSource...));
> {code}
> The implementation should be speed tested to determine the benefit for
> {{nextBoolean()}} and if {{nextInt()}} can be improved for {{LongProviders}}.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)