RFR: 8346107: Generators: testing utility for random value generation [v16]

Christian Hagedorn chagedorn at openjdk.org
Tue Jan 14 16:24:45 UTC 2025


On Fri, 10 Jan 2025 09:01:16 GMT, Theo Weidmann <tweidmann at openjdk.org> wrote:

>> This PR is a refactoring and partial rewrite of https://github.com/openjdk/jdk/pull/22716 by @eme64. The goals remain the same:
>> 
>>> For verification testing, it is often critical to generate "interesting" values, to provoke overflows, NaN, etc. And to generate these values in the correct distribution to trigger certain optimizations.
>>> 
>>> I would like to start a collection of such generators, that can then be used in testing.
>>> 
>>> The goal is to grow this collection in the future, and add new types. For example byte, char, short, or even Float16.
>>> 
>>> This will be helpful for the Template framework [JDK-8344942](https://bugs.openjdk.org/browse/JDK-8344942), but also other tests.
>>> 
>>> Related PR, for value verification: https://github.com/openjdk/jdk/pull/22715
>> 
>> The refactoring makes use of generics, rendering the generators library more flexible by default, by allowing it work with arbitrary types (with special features for Comparable types), improving the composability of different generators and streamlining the client API for simplicity. This allows test authors to quickly compose their own distributions and generators if necessary. An overview of this functionality is provided in the `Generators` javadoc.
>
> Theo Weidmann has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Fix spacing

test/hotspot/jtreg/compiler/lib/generators/Generators.java line 33:

> 31: 
> 32: /**
> 33:  * The generators class provides a set of random generator functions for testing.

Nice description. A suggestion: It is sometimes difficult to distinguish between generators in general and the class `Generators` itself. How about using `{@code Generators}` when talking about the class itself?

test/hotspot/jtreg/compiler/lib/generators/Generators.java line 92:

> 90:  * For example, you might restrict a generator choosing strings at random:
> 91:  * <pre><code>G.orderedRandomElement(List.of("Bob", "Alice", "Carol")).restricted("Al", "Bz")</code></pre>
> 92:  * <p>

Maybe you can expand a little here what this does in terms of created generators and their value sets.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/22941#discussion_r1914956572
PR Review Comment: https://git.openjdk.org/jdk/pull/22941#discussion_r1915008582


More information about the hotspot-compiler-dev mailing list