I am very pleased to announce a new release of FsCheck, for the first time on codeplex! Here is a short description.
FsCheck is a port of Haskell's QuickCheck: it is a tool for testing F# programs automatically. The programmer provides a specification of the program, in the form of properties which functions, methods or objects should satisfy, and FsCheck then tests that the properties hold in a large number of randomly generated cases. While writing the properties, you are actually writing a testable specification of your program. Specifications are expressed in F#, using combinators defined in the FsCheck library. FsCheck provides combinators to define properties, observe the distribution of test data, and define test data generators.
This release brings FsCheck about up to par with QuickCheck 0.1, and adds some smaller features. An overview:
- Added feature to derive a generator from the type of arguments. You can add your own generators for custom types. Radically reduces the use of forAll.
- Added feature to reduce use of prop and propl. For example: "quickCheck (fun a -> a+a = 2*a)" just works.
- Added feature to group related properties in a class, and check it at once. Can also be used to check all toplevel properties in a module.
- FsChecks no longer dies when a property throws an exception, but reports a test failure.
- Bug fixes and suggestions received through this blog, email and hubfs implemented. Thanks Neil, Chance, Mat and Anton, and everyone who emailed me!
- Some extension points to use FsCheck with whateverUnit frameworks.
- Updated examples, and documentation, the whole codeplex thing.
It was a lot of work, but I hope it was worth it.
I plan to devote more of my time to other projects from now on, at least for the next coming months. That said, your contributions to FsCheck are more than welcome. Besides, this release should keep you quiet for a while ;).
I will be posting some suggestions for features and improvements soon, should you run out of ideas.
[Update: check out the FsCheck issue tracker for some ideas on how to contribute]