Random.nextLong(long bound)?
Dawid Weiss
dawid.weiss at gmail.com
Thu Oct 19 06:44:38 UTC 2017
Hi Steven,
> We were hoping to have a single sequence shared between the library that takes Random and our
> own code that hopes to generate bounded longs. We want such tight control because we are writing
> a repeatable tester and want to use the seed to be able to replay sequences that cause our
> system to fail.
A repeatable randomized tester is a noble idea; have you perhaps tried
the randomized
testing package (full disclosure -- I'm the author) [1]?
This is used in Solr/Lucene and other projects for running JUnit tests
with predictable
randomness (where it's possible to assert it, of course [4]). The
Random instance you get from the test's context should be
predictable and has an implementation of nextLong() with a long cycle
(as pointed out, it's not the long range,
it's the rnd generator's cycle that is a problem here).
> complex for us to just implement the naïve re-roll algorithm [ while(sample >= bound) sample = nextLong(); ]
There are some utilities that should be helpful here [2], but
Sebastiano Vigna (dsiutil package [3]) has Random
implementations with very long cycles too.
Dawid
[1] https://github.com/randomizedtesting/randomizedtesting
[2] https://github.com/randomizedtesting/randomizedtesting/blob/aeebebef5e8961205c60c2f4d5f4bf82b68cf0a8/randomized-runner/src/main/java/com/carrotsearch/randomizedtesting/generators/RandomNumbers.java
[3] http://dsiutils.di.unimi.it/
[4] https://berlinbuzzwords.de/sites/berlinbuzzwords.de/files/media/documents/dawidweiss-randomizedtesting-pub.pdf
More information about the core-libs-dev
mailing list