Skip to content

Conversation

@jmid
Copy link
Collaborator

@jmid jmid commented Nov 7, 2025

Approaching Mount Doom our renaming adventure continues with the string generators.

The current status here is ... large and messy:

Combinator name QCheck.Gen QCheck.arbitrary QCheck2.Gen
string ?gen:char t -> string t string arbitrary string t
string_size ?gen:char t -> int t -> string t - ?gen:char t -> int t -> string t
string_of char t -> string t char Gen.t -> string arbitrary char t -> string t
string_printable string t string arbitrary string t
printable_string - string arbitrary -
string_small string t string arbitrary string t
string_small_of char t -> string t char Gen.t -> string arbitrary char t -> string t
string_gen_of_size - int Gen.t -> char Gen.t -> string arbitrary -
string_gen - char Gen.t -> string arbitrary -
small_string ?gen:char t -> string t string arbitrary ?gen:char t -> string t
string_readable string t - -
string_of_size - int Gen.t -> string arbitrary -
printable_string_of_size - int Gen.t -> string arbitrary -
string_printable_of_size - int Gen.t -> string arbitrary -
small_printable_string - string arbitrary -
string_small_printable - string arbitrary -
numeral_string - string arbitrary -
string_numeral - string arbitrary -
numeral_string_of_size - int Gen.t -> string arbitrary -
string_numeral_of_size - int Gen.t -> string arbitrary -

Observations:

  • Like for bytes, QCheck.Gen.string inconsistently accepts an optional ?gen parameter
  • QCheck.string_size is missing for consistency
  • There is a ton of inconsistently named combinators - and in particularly in QCheck.arbitrary

To move forward the PR

  • adds QCheck.string_size for consistency
  • removes the optional gen parameter from QCheck.Gen.string for consistency (API breaking):
  • adds QCheck.Gen.string_size_of, QCheck.string_size_of, and QCheck2.Gen.string_size_of for consistency
  • deprecates QCheck.Gen.small_string, QCheck.small_string, and QCheck2.small_string
  • deprecates an array of badly-named combinators from QCheck:
    • QCheck.string_gen_of_size
    • QCheck.string_gen
    • QCheck.string_of_size
    • QCheck.printable_string
    • QCheck.printable_string_of_size
    • QCheck.string_printable_of_size
    • QCheck.small_printable_string
    • QCheck.string_small_printable
    • QCheck.numeral_string
    • QCheck.string_numeral
    • QCheck.numeral_string_of_size
    • QCheck.string_numeral_of_size

I know the latter is a bit aggressive, but I'd rather spend my cycles maintaining a few well-chosen combinators rather than a combinatorial explosion of combinations that are seldomly used (I checked https://sherlocode.com/).

If we go with this, the result is a small collection of names, consistent with what we will offer for bytes:

Combinator name QCheck.Gen QCheck.arbitrary QCheck2.Gen
string string t string arbitrary string t
string_of char t -> string t char Gen.t -> string arbitrary char t -> string t
string_size ?gen:char t -> int t -> string t ?gen:char Gen.t -> int Gen.t -> string arbitrary ?gen:char t -> int t -> string t
string_size_of int t -> char t -> string t int Gen.t -> char Gen.t -> string arbitrary int t -> char t -> string t
string_small string t string arbitrary string t
string_small_of char t -> string t char Gen.t -> string arbitrary char t -> string t
string_printable string t string arbitrary string t

Like for bytes in #371, this postpones the removal of (now redundant) optional ?gen parameters to string_size to the future 1.0.0 release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant