Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide Catch2's StringMaker specialization behind extra level of indirection #2830

Open
horenmar opened this issue Feb 27, 2024 · 0 comments

Comments

@horenmar
Copy link
Member

Right now, users cannot change how Catch2 stringifies types that it provides
StringMaker specializations for, such as float or double. This is due
to the stringification priority being StringMaker<T> -> operator<< ->
fallbacks (enum handler, range handler, etc).

However, users often want to customize the output, e.g. the printed
precision for floating point types.

There are three ways to handle this, none of them particularly great.

  • Provide customization knobs that the users can use to do what they want.
    This option means that there is approximately infinity work to do, and
    the customization options and desires can be mutually exclusive as well.
  • Allow piecemeal disabling of each StringMaker specialization, e.g.
    CATCH_CONFIG_DISABLE_FLOAT_STRINGMAKER, or CATCH_CONFIG_DISABLE_DOUBLE_STRINGMAKER.
    This option adds a ton of configuration macros, which the users
    are already bad at using -> it is common for users to build the impl.
    library and their own tests with different configuration options, thus
    breaking ODR.
  • Hide Catch2-provided stringifiers behind another layer of indirection,
    e.g. StringMakerInternal, used from the generic StringMaker template.
    This allows the users to provide specialization of StringMaker and
    have their specialization be used instead of ours. This is the best
    technical approach, but has the disadvantage of causing potentially
    significant compile time overhead.

Of these three options, only the last one is reasonable to implement,
but we need to measure the compile time overhead first, and decide
based on the final values.

@horenmar horenmar added this to the Long term goals milestone Feb 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant