colin: > SmallCheck: another lightweight testing library in Haskell. > > Folk-law: if there is any case in which a program fails, there is almost > always a simple one. > > SmallCheck is similar to QuickCheck (Claessen and Hughes 2000-) > but instead of a sample of randomly generated values, SmallCheck > tests properties for all the finitely many values up to some depth, > progressively increasing the depth used. For data values, depth means > depth of construction. For functional values, it is a measure combining > the depth to which arguments may be evaluated and the depth of possible > results. > > Other possible sales pitches: > * write test generators for your own types more easily > * be sure any counter-examples found are minimal > * write properties using existentials as well as universals > * establish complete coverage of a defined test-space > * display counter-examples of functional type > > A new version of SmallCheck can be obtained from: > http://www.cs.york.ac.uk/fp/smallcheck0.1.tar > The differences from 0.0 are two fixes (space-fault, output buffering), > an 'unsafe' but sometimes useful Testable (IO a) instance and additional > examples. > > Comments and suggestions welcome.
I've written a lambdabot plugin for SmallCheck, to go with the existing one for QuickCheck. It's running on #haskell now (after removing that pesky Testable IO instance (not good for security...). Let's run QuickCheck (check) head to head with SmallCheck (scheck): $ ./lambdabot Initialising plugins ................................................. done. lambdabot> check True OK, passed 500 tests. lambdabot> scheck True Completed 1 test(s) without failure. lambdabot> check \s -> (s :: [Int]) == (reverse . reverse) s OK, passed 500 tests. lambdabot> scheck \s -> (s :: [Int]) == (reverse . reverse) s Completed 623530 test(s) without failure. lambdabot> check \s -> not (null s) ==> minimum (s :: [Int]) == (head . sort) s OK, passed 500 tests. lambdabot> scheck \s -> not (null s) ==> minimum (s :: [Int]) == (head . sort) s Completed 623530 test(s) without failure. But 1 did not meet ==> condition. lambdabot> scheck \s -> not (null s) ==> minimum (s :: [Int]) == (last . sort) s Failed test no. 10. Test values follow.: [-1,-1,-1,-1,-1,-1,-1,0] lambdabot> check \s -> not (null s) ==> minimum (s :: [Int]) == (last . sort) s Falsifiable, after 1 tests: [2,1] One thing needed for online use: some more instances for the various numeric types might be useful, Float, Double, Ratio, Complex etc. -- Don _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell