3 ms·
QuickCheck is great and can be found in many languages - dynamic and static alike - nowadays. Another tool that is currently unique to Haskell and is easier to
by Dn_Ab 14y ago
QuickCheck is great and can be found in many languages - dynamic and static alike - nowadays. Another tool that is currently unique to Haskell and is easier to write tests for is Lazy/SmallCheck. SmallCheck shines in the left long tail of failure. Its core idea is based on a powerful principle: "If
a program does not fail in any simple case, it hardly ever fails in
any case."[]
So SmallCheck works exhaustively to find a minimal counterexample within some depth bound. This makes sense - when trying to characterize a structure for failure (or anything) you can rarely do better than the simplest explanation. However, when the problem lies in larger examples SmallCheck fails where QuickCheck catches a result so something like Type Check -> SmallCheck -> QuickCheck -> probably ok.
[] http://www.cs.york.ac.uk/fp/smallcheck/ http://www.cs.york.ac.uk/fp/smallcheck/ documentation
- gtani 14y agoand the guarantees (both random and exhaustive testing) for GenCheck http://permalink.gmane.org/gmane.comp.lang.haskell.general/19371 http://permalink.gmane.org/gmane.comp.lang.haskell.general/1...
- tikhonj 14y agoQuickcheck exists in a bunch of different languages, but Haskell's type system makes it easier to use and implement because it can rely on type information to figure out which generator to use for any given input.