This is a hopefully temporary page, tracking evaluation of Nico's proposed refactoring and any alternatives and related issues.
Organized as (nested) list of questions.
- What problem are we trying to solve?
- A general change to allow an implementation of a variety of useful features (in test.check directly or by users/libraries):
- async tests
- statistics
- time-bounded runs, time-bounded shrinks
- more speculatively, pausing and resuming shrinks
- Note that we shouldn't assume we have to solve all these problems with the same changes, but if a change simultaneously enables all of them, that could be considered evidence in its favor
- A general change to allow an implementation of a variety of useful features (in test.check directly or by users/libraries):
- How do other quickchecks do any of those things?
- At least
- Hedgehog
- Proper
- Optionally
- Quickcheck
- Hypothesis
- At least
- Nico's solution
- My general concern is that it changes the public API, so we have to get it right, and it seems to allow a lot of undefined/strange things, since the user's supplied function could return whatever it wants; e.g., it could return a structure that's inconsistent or sends the algorithm to an unexpected state
- I'm also wondering how it composes; e.g., if the stats library provides one implementation of the state transition function, and the user provides another for limiting shrink time, how do you combine those functions together? does `comp` work? is it commutative?
Labels: