QuickCheck-2.4.1: Automatic testing of Haskell programs

Test.QuickCheck.Function

Description

Generation of random shrinkable, showable functions. Not really documented at the moment!

Example of use:

>>> :{
>>> let prop :: Fun String Integer -> Bool
>>> prop (Fun _ f) = f "monkey" == f "banana" || f "banana" == f "elephant"
>>> :}
>>> quickCheck prop
*** Failed! Falsifiable (after 3 tests and 134 shrinks):     
{"elephant"->1, "monkey"->1, _->0}

To generate random values of type Fun a b, you must have an instance Function a. If your type has a Show instance, you can use functionShow to write the instance; otherwise, use functionMap to give a bijection between your type and a type that is already an instance of Function. See the Function [a] instance for an example of the latter.

Documentation

data Fun a b Source

Constructors

Fun (a :-> b, b) (a -> b) 

Instances

(Show a, Show b) => Show (Fun a b) 
(Function a, CoArbitrary a, Arbitrary b) => Arbitrary (Fun a b) 

apply :: Fun a b -> a -> bSource

data a :-> c Source

Instances

Functor (:-> a) 
(Show a, Show b) => Show (:-> a b) 
(Function a, CoArbitrary a, Arbitrary b) => Arbitrary (:-> a b) 

functionMap :: Function b => (a -> b) -> (b -> a) -> (a -> c) -> a :-> cSource

functionShow :: (Show a, Read a) => (a -> c) -> a :-> cSource