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

Reply via email to