Skip to end of metadata
Go to start of metadata

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
  • How do other quickchecks do any of those things?
    • At least
      • Hedgehog
      • Proper
    • Optionally
      • Quickcheck
      • Hypothesis
  • 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?