I am ok with both LANG and TEXT deprecating to RNG.

Gary
On Tue, Dec 6, 2022, 13:21 Alex Herbert <alex.d.herb...@gmail.com> wrote:

> On Tue, 6 Dec 2022 at 17:22, Gary Gregory <garydgreg...@gmail.com> wrote:
> >
> > I agree this should be in rng.
> >
> > Does rng duplicate all of the lang APIs such that we can deprecate the
> lang
> > methods?
>
> In short, yes.
>
> (cd src/main && git grep -c Random)
> - ArrayUtils
> - RandomStringUtils
> - RandomUtils
>
> The proposed ArraySampler with shuffle methods for all array types
> would deprecate ArrayUtils.shuffle. You would have to provide a
> UniformRandomProvider in place of a java.util.Random.
>
> RandomStringUtils is not explicitly deprecated. However the class
> javadoc states that Commons Text's RandomStringGenerator and,
> generically, Commons RNG are more suitable for random generation.
>
> RandomUtils is already deprecated. It mentions RNG in the header but
> the functionality is for static thread-safe calls for random numbers.
> The RandomUtils class is partly deprecated by changing calls from
> RandomUtils.xxx to ThreadLocalRandom.current().xxx. The class uses
> ThreadLocalRandom under the hood, but does not act as a pass-through
> for all methods. It looks like these could be updated to directly use
> ThreadLocalRandom's implementation:
>
> nextLong(long upper)
>
> Note: This method in RandomUtils does not check upper > 0 which is a bug.
>
> However the bounds for some methods are different, some have extra
> conditions and some are missing from ThreadLocalRandom.
>
> method : lang : ThreadLocalRandom
> nextBytes(int) : present : NA
> nextDouble() : [0, MAX_VALUE) : [0, 1)
> nextDouble(lower, upper) : [lower, upper) | upper > lower >= 0 : upper >
> lower
> nextFloat() : [0, MAX_VALUE) : [0, 1)
> nextFloat(lower, upper) : [lower, upper) | upper > lower >= 0 : NA
> nextInt() : [0, MAX_VALUE) : [MIN_VALUE, MAX_VALUE]
> nextInt(upper) : NA : [0, upper)
> nextInt(lower, upper) : [lower, upper) | upper > lower >= 0 : [lower,
> upper) | upper > lower
> nextLong() : [0, MAX_VALUE) : [MIN_VALUE, MAX_VALUE]
> nextLong(upper) : [0, upper) [no check upper > 0] : [0, upper)
> nextLong(lower upper) : [lower, upper) | upper > lower >= 0 : [lower,
> upper) | upper > lower
>
> All these methods are in the UniformRandomProvider interface from
> [rng], including the nextFloat with ranges but with the exception of
> nextBytes(int count). The generators provide nextBytes(byte[]) and you
> must supply the array.
>
> In this case it may be helpful to document each method with an
> equivalent from ThreadLocalRandom that provides a thread-safe static
> call to generate the same output (with the exception that lower bounds
> can be negative in ThreadLocalRandom).
>
> Alex
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to