[Update: I noticed that the download comes with a preliminary version of random.fs, which contained many mistakes! I've now updated the link. Sorry! I also added the link directly to this post as well.]
[Update 2: I converted the old F# project to a shiny new .fsproj compatible with the F# September CTP which was released yesterday. Had to clean up and change some code as well, mostly due to renames and a different type signature of assert. New download link below.]
Version 0.2 introduces the following changes:
- Ported the Haskell random implementation, which gives more dependable results when splitting seeds.
- Introduced lazy evaluation of properties to improve checking of conditional properties. The function prop needs a lazy argument from now on; a shorthand propl can be used if you don't need or want this. (Thanks to galen for bringing this to my attention)
- Tried lots of approaches to get rid of both prop and lazy when they are not needed. Also tried to get rid of the generators using reflection and quotations. Very few approaches were feasible, none were satisfactory. In the end, nothing changed. I'm hoping for type classes or some other way of overloading and/or implicit parameter passing, but I'll guess that'll be for F# 2.0 at the earliest. If anyone has any suggestions, please let me know.
- Added some examples in another style, where the property is separated from the actual generator, and added some convenience functions qcheck and vcheck to support this style. This improves readability of the actual properties, and makes them somewhat more reusable.
Breaking change: if you have some properties lying around, the easiest way to get them to work is to replace prop by propl.
Read the updated complete documentation in my previous post. My plan is to keep that post as the up to date and complete documentation of the latest version, and announcing new releases with changes in separate posts like this.
Thanks for your interest, and do keep giving me feedback and suggestions!
Hi,
ReplyDeleteThere's a minor bug in the definition of "elements". It should be choose (0, List.length xs-1) instead of choose (0, List.length xs).
Thanks!
Thanks mat. I've also found this bug. Hopefully I'll have some time to release 0.3 soon...
ReplyDeletethanks!
Kurt