QuickCheck-2.14.3: Automatic testing of Haskell programs
Safe HaskellSafe
LanguageHaskell2010

Test.QuickCheck.Gen

Description

Test case generation.

Note: the contents of this module (except for the definition of Gen) are re-exported by Test.QuickCheck. You probably do not need to import it directly.

Synopsis

Generator type

newtype Gen a Source #

A generator for values of type a.

The third-party packages QuickCheck-GenT and quickcheck-transformer provide monad transformer versions of Gen.

Constructors

MkGen 

Fields

  • unGen :: QCGen -> Int -> a

    Run the generator on a particular seed. If you just want to get a random value out, consider using generate.

Instances

Instances details
MonadFix Gen Source # 
Instance details

Defined in Test.QuickCheck.Gen

Methods

mfix :: (a -> Gen a) -> Gen a Source #

Applicative Gen Source # 
Instance details

Defined in Test.QuickCheck.Gen

Methods

pure :: a -> Gen a Source #

(<*>) :: Gen (a -> b) -> Gen a -> Gen b Source #

liftA2 :: (a -> b -> c) -> Gen a -> Gen b -> Gen c Source #

(*>) :: Gen a -> Gen b -> Gen b Source #

(<*) :: Gen a -> Gen b -> Gen a Source #

Functor Gen Source # 
Instance details

Defined in Test.QuickCheck.Gen

Methods

fmap :: (a -> b) -> Gen a -> Gen b Source #

(<$) :: a -> Gen b -> Gen a Source #

Monad Gen Source # 
Instance details

Defined in Test.QuickCheck.Gen

Methods

(>>=) :: Gen a -> (a -> Gen b) -> Gen b Source #

(>>) :: Gen a -> Gen b -> Gen b Source #

return :: a -> Gen a Source #

Testable prop => Testable (Gen prop) Source # 
Instance details

Defined in Test.QuickCheck.Property

Methods

property :: Gen prop -> Property Source #

propertyForAllShrinkShow :: Gen a -> (a -> [a]) -> (a -> [String]) -> (a -> Gen prop) -> Property Source #

Primitive generator combinators

variant :: Integral n => n -> Gen a -> Gen a Source #

Modifies a generator using an integer seed.

sized :: (Int -> Gen a) -> Gen a Source #

Used to construct generators that depend on the size parameter.

For example, listOf, which uses the size parameter as an upper bound on length of lists it generates, can be defined like this:

listOf :: Gen a -> Gen [a]
listOf gen = sized $ \n ->
  do k <- choose (0,n)
     vectorOf k gen

You can also do this using getSize.

getSize :: Gen Int Source #

Returns the size parameter. Used to construct generators that depend on the size parameter.

For example, listOf, which uses the size parameter as an upper bound on length of lists it generates, can be defined like this:

listOf :: Gen a -> Gen [a]
listOf gen = do
  n <- getSize
  k <- choose (0,n)
  vectorOf k gen

You can also do this using sized.

resize :: Int -> Gen a -> Gen a Source #

Overrides the size parameter. Returns a generator which uses the given size instead of the runtime-size parameter.

scale :: (Int -> Int) -> Gen a -> Gen a Source #

Adjust the size parameter, by transforming it with the given function.

choose :: Random a => (a, a) -> Gen a Source #

Generates a random element in the given inclusive range. For integral and enumerated types, the specialised variants of choose below run much quicker.

chooseAny :: Random a => Gen a Source #

Generates a random element over the natural range of a.

chooseEnum :: Enum a => (a, a) -> Gen a Source #

A fast implementation of choose for enumerated types.

chooseInt :: (Int, Int) -> Gen Int Source #

A fast implementation of choose for Int.

chooseBoundedIntegral :: (Bounded a, Integral a) => (a, a) -> Gen a Source #

A fast implementation of choose for bounded integral types.

chooseInteger :: (Integer, Integer) -> Gen Integer Source #

A fast implementation of choose for Integer.

generate :: Gen a -> IO a Source #

Run a generator. The size passed to the generator is always 30; if you want another size then you should explicitly use resize.

sample' :: Gen a -> IO [a] Source #

Generates some example values.

sample :: Show a => Gen a -> IO () Source #

Generates some example values and prints them to stdout.

Floating point

genDouble :: Gen Double Source #

Generate Double in 0..1 range

genFloat :: Gen Float Source #

Generate Float in 0..1 range

Common generator combinators

suchThat :: Gen a -> (a -> Bool) -> Gen a Source #

Generates a value that satisfies a predicate.

suchThatMap :: Gen a -> (a -> Maybe b) -> Gen b Source #

Generates a value for which the given function returns a Just, and then applies the function.

suchThatMaybe :: Gen a -> (a -> Bool) -> Gen (Maybe a) Source #

Tries to generate a value that satisfies a predicate. If it fails to do so after enough attempts, returns Nothing.

oneof :: [Gen a] -> Gen a Source #

Randomly uses one of the given generators. The input list must be non-empty.

frequency :: [(Int, Gen a)] -> Gen a Source #

Chooses one of the given generators, with a weighted random distribution. The input list must be non-empty.

elements :: [a] -> Gen a Source #

Generates one of the given values. The input list must be non-empty.

sublistOf :: [a] -> Gen [a] Source #

Generates a random subsequence of the given list.

shuffle :: [a] -> Gen [a] Source #

Generates a random permutation of the given list.

growingElements :: [a] -> Gen a Source #

Takes a list of elements of increasing size, and chooses among an initial segment of the list. The size of this initial segment increases with the size parameter. The input list must be non-empty.

listOf :: Gen a -> Gen [a] Source #

Generates a list of random length. The maximum length depends on the size parameter.

listOf1 :: Gen a -> Gen [a] Source #

Generates a non-empty list of random length. The maximum length depends on the size parameter.

vectorOf :: Int -> Gen a -> Gen [a] Source #

Generates a list of the given length.

infiniteListOf :: Gen a -> Gen [a] Source #

Generates an infinite list.