[Haskell-cafe] ANN: LeanCheck v0.9.0 -- enumerative property testing

Rudy Matela rudy at matela.com.br
Fri Jan 18 01:00:35 UTC 2019


On Thu, Jan 17, 2019 at 06:28:32PM +0100, Johannes Waldmann wrote:
> Prelude Test.LeanCheck> checkFor 1000 $ \ x y z -> isInfinite x ||
> isInfinite y || isInfinite z || (x::Double) + (y+z) == (x+y)+z
> *** Failed! Falsifiable (after 306 tests):
> 1.0 1.0 0.3333333333333333
> 
> Turns out the enumeration in Leancheck uses Rationals,
> while Smallcheck uses  encodeFloat, which happens to
> produce only "nice" numbers (very few bits set) in the beginning.

I improved the LeanCheck floating enumeration starting with v0.8.0 to
catch exactly this kind of error.  :-)

> PS: this post wouldn't be complete without me complaining
> that I cannot (easily) put the type annotation
> where it belongs -  in the declaration of the name:
> 
> Prelude Test.LeanCheck> check $ \ (x::Double) y z -> x + (y+z) == (x+y)+z
> 
> <interactive>:22:12: error:
>     Illegal type signature: ‘Double’
>       Type signatures are only allowed in patterns with ScopedTypeVariables
> 
> Wat? TypeVariables? There aren't any!

You can get the above to parse by passing `-XScopedTypeVariables` to GHC:

	$ ghci -XScopedTypeVariables
	> import Test.LeanCheck
	> check $ \(x::Double) y z -> x + (y+z) == (x+y) + z
	*** Failed! Falsifiable (after 87 tests):
	0.0 Infinity (-Infinity)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20190117/5064b83b/attachment.html>


More information about the Haskell-Cafe mailing list