Blame Test/QuickCheck.hs

Packit 1d8052
{-|
Packit 1d8052
The <http://www.cse.chalmers.se/~rjmh/QuickCheck/manual.html QuickCheck manual>
Packit 1d8052
gives detailed information about using QuickCheck effectively.
Packit 1d8052
Packit 1d8052
To start using QuickCheck, write down your property as a function returning @Bool@.
Packit 1d8052
For example, to check that reversing a list twice gives back the same list you can write:
Packit 1d8052
Packit 1d8052
@
Packit 1d8052
import Test.QuickCheck
Packit 1d8052
Packit 1d8052
prop_reverse :: [Int] -> Bool
Packit 1d8052
prop_reverse xs = reverse (reverse xs) == xs
Packit 1d8052
@
Packit 1d8052
Packit 1d8052
You can then use QuickCheck to test @prop_reverse@ on 100 random lists:
Packit 1d8052
Packit 1d8052
>>> quickCheck prop_reverse
Packit 1d8052
+++ OK, passed 100 tests.
Packit 1d8052
Packit 1d8052
To run more tests you can use the 'withMaxSuccess' combinator:
Packit 1d8052
Packit 1d8052
>>> quickCheck (withMaxSuccess 10000 prop_reverse)
Packit 1d8052
+++ OK, passed 10000 tests.
Packit 1d8052
Packit 1d8052
To use QuickCheck on your own data types you will need to write 'Arbitrary'
Packit 1d8052
instances for those types. See the
Packit 1d8052
<http://www.cse.chalmers.se/~rjmh/QuickCheck/manual.html QuickCheck manual> for
Packit 1d8052
details about how to do that.
Packit 1d8052
Packit 1d8052
This module exports most of QuickCheck's functionality, but see also
Packit 1d8052
"Test.QuickCheck.Monadic" which helps with testing impure or monadic code.
Packit 1d8052
-}
Packit 1d8052
{-# LANGUAGE CPP #-}
Packit 1d8052
#ifndef NO_SAFE_HASKELL
Packit 1d8052
{-# LANGUAGE Safe #-}
Packit 1d8052
#endif
Packit 1d8052
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 708
Packit 1d8052
{-# LANGUAGE PatternSynonyms #-}
Packit 1d8052
#endif
Packit 1d8052
module Test.QuickCheck
Packit 1d8052
  (
Packit 1d8052
    -- * Running tests
Packit 1d8052
    quickCheck
Packit 1d8052
  , Args(..), Result(..)
Packit 1d8052
  , stdArgs
Packit 1d8052
  , quickCheckWith
Packit 1d8052
  , quickCheckWithResult
Packit 1d8052
  , quickCheckResult
Packit 1d8052
    -- ** Running tests verbosely
Packit 1d8052
  , verboseCheck
Packit 1d8052
  , verboseCheckWith
Packit 1d8052
  , verboseCheckWithResult
Packit 1d8052
  , verboseCheckResult
Packit 1d8052
#ifndef NO_TEMPLATE_HASKELL
Packit 1d8052
    -- ** Testing all properties in a module
Packit 1d8052
  , quickCheckAll
Packit 1d8052
  , verboseCheckAll
Packit 1d8052
  , forAllProperties
Packit 1d8052
    -- ** Testing polymorphic properties
Packit 1d8052
  , polyQuickCheck
Packit 1d8052
  , polyVerboseCheck
Packit 1d8052
  , monomorphic
Packit 1d8052
#endif
Packit 1d8052
Packit 1d8052
    -- * Random generation
Packit 1d8052
  , Gen
Packit 1d8052
    -- ** Generator combinators
Packit 1d8052
  , choose
Packit 1d8052
  , oneof
Packit 1d8052
  , frequency
Packit 1d8052
  , elements
Packit 1d8052
  , growingElements
Packit 1d8052
  , sized
Packit 1d8052
  , getSize
Packit 1d8052
  , resize
Packit 1d8052
  , scale
Packit 1d8052
  , suchThat
Packit 1d8052
  , suchThatMap
Packit 1d8052
  , suchThatMaybe
Packit 1d8052
  , listOf
Packit 1d8052
  , listOf1
Packit 1d8052
  , vectorOf
Packit 1d8052
  , infiniteListOf
Packit 1d8052
  , shuffle
Packit 1d8052
  , sublistOf
Packit 1d8052
    -- ** Generators which use Arbitrary
Packit 1d8052
  , vector
Packit 1d8052
  , orderedList
Packit 1d8052
  , infiniteList
Packit 1d8052
    -- ** Running a generator
Packit 1d8052
  , generate
Packit 1d8052
    -- ** Generator debugging
Packit 1d8052
  , sample
Packit 1d8052
  , sample'
Packit 1d8052
Packit 1d8052
    -- * Arbitrary and CoArbitrary classes
Packit 1d8052
  , Arbitrary(..)
Packit 1d8052
  , CoArbitrary(..)
Packit 1d8052
Packit 1d8052
  -- ** Unary and Binary classes
Packit 1d8052
  , Arbitrary1(..)
Packit 1d8052
  , arbitrary1
Packit 1d8052
  , shrink1
Packit 1d8052
  , Arbitrary2(..)
Packit 1d8052
  , arbitrary2
Packit 1d8052
  , shrink2
Packit 1d8052
Packit 1d8052
    -- ** Helper functions for implementing arbitrary
Packit 1d8052
  , arbitrarySizedIntegral
Packit 1d8052
  , arbitrarySizedNatural
Packit 1d8052
  , arbitrarySizedFractional
Packit 1d8052
  , arbitrarySizedBoundedIntegral
Packit 1d8052
  , arbitraryBoundedIntegral
Packit 1d8052
  , arbitraryBoundedRandom
Packit 1d8052
  , arbitraryBoundedEnum
Packit 1d8052
  , arbitraryUnicodeChar
Packit 1d8052
  , arbitraryASCIIChar
Packit 1d8052
  , arbitraryPrintableChar
Packit 1d8052
    -- ** Helper functions for implementing shrink
Packit 1d8052
#ifndef NO_GENERICS
Packit 1d8052
  , genericCoarbitrary
Packit 1d8052
  , genericShrink
Packit 1d8052
  , subterms
Packit 1d8052
  , recursivelyShrink
Packit 1d8052
#endif
Packit 1d8052
  , shrinkNothing
Packit 1d8052
  , shrinkList
Packit 1d8052
  , shrinkMap
Packit 1d8052
  , shrinkMapBy
Packit 1d8052
  , shrinkIntegral
Packit 1d8052
  , shrinkRealFrac
Packit 1d8052
    -- ** Helper functions for implementing coarbitrary
Packit 1d8052
  , variant
Packit 1d8052
  , coarbitraryIntegral
Packit 1d8052
  , coarbitraryReal
Packit 1d8052
  , coarbitraryShow
Packit 1d8052
  , coarbitraryEnum
Packit 1d8052
  , (><)
Packit 1d8052
Packit 1d8052
    -- ** Type-level modifiers for changing generator behavior
Packit 1d8052
  , Blind(..)
Packit 1d8052
  , Fixed(..)
Packit 1d8052
  , OrderedList(..)
Packit 1d8052
  , NonEmptyList(..)
Packit 1d8052
  , Positive(..)
Packit 1d8052
  , NonZero(..)
Packit 1d8052
  , NonNegative(..)
Packit 1d8052
  , Large(..)
Packit 1d8052
  , Small(..)
Packit 1d8052
  , Smart(..)
Packit 1d8052
  , Shrink2(..)
Packit 1d8052
#ifndef NO_MULTI_PARAM_TYPE_CLASSES
Packit 1d8052
  , Shrinking(..)
Packit 1d8052
  , ShrinkState(..)
Packit 1d8052
#endif
Packit 1d8052
  , ASCIIString(..)
Packit 1d8052
  , UnicodeString(..)
Packit 1d8052
  , PrintableString(..)
Packit 1d8052
Packit 1d8052
    -- ** Functions
Packit 1d8052
  , Fun
Packit 1d8052
  , applyFun
Packit 1d8052
  , applyFun2
Packit 1d8052
  , applyFun3
Packit 1d8052
#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL__ >= 708
Packit 1d8052
  , pattern Fn
Packit 1d8052
  , pattern Fn2
Packit 1d8052
  , pattern Fn3
Packit 1d8052
#endif
Packit 1d8052
  , Function (..)
Packit 1d8052
  , functionMap
Packit 1d8052
Packit 1d8052
    -- * Properties
Packit 1d8052
  , Property, Testable(..)
Packit 1d8052
    -- ** Property combinators
Packit 1d8052
  , forAll
Packit 1d8052
  , forAllShrink
Packit 1d8052
  , shrinking
Packit 1d8052
  , (==>)
Packit 1d8052
  , (===)
Packit 1d8052
#ifndef NO_DEEPSEQ
Packit 1d8052
  , total
Packit 1d8052
#endif
Packit 1d8052
  , ioProperty
Packit 1d8052
    -- *** Controlling property execution
Packit 1d8052
  , verbose
Packit 1d8052
  , once
Packit 1d8052
  , again
Packit 1d8052
  , withMaxSuccess
Packit 1d8052
  , within
Packit 1d8052
  , noShrinking
Packit 1d8052
    -- *** Conjunction and disjunction
Packit 1d8052
  , (.&.)
Packit 1d8052
  , (.&&.)
Packit 1d8052
  , conjoin
Packit 1d8052
  , (.||.)
Packit 1d8052
  , disjoin
Packit 1d8052
    -- *** What to do on failure
Packit 1d8052
  , counterexample
Packit 1d8052
  , printTestCase
Packit 1d8052
  , whenFail
Packit 1d8052
  , whenFail'
Packit 1d8052
  , expectFailure
Packit 1d8052
    -- *** Analysing test distribution
Packit 1d8052
  , label
Packit 1d8052
  , collect
Packit 1d8052
  , classify
Packit 1d8052
  , cover
Packit 1d8052
    -- *** Miscellaneous
Packit 1d8052
  , Discard(..)
Packit 1d8052
  , discard
Packit 1d8052
  , mapSize
Packit 1d8052
  )
Packit 1d8052
 where
Packit 1d8052
Packit 1d8052
--------------------------------------------------------------------------
Packit 1d8052
-- imports
Packit 1d8052
Packit 1d8052
import Test.QuickCheck.Gen
Packit 1d8052
import Test.QuickCheck.Arbitrary
Packit 1d8052
import Test.QuickCheck.Modifiers
Packit 1d8052
import Test.QuickCheck.Property hiding ( Result(..) )
Packit 1d8052
import Test.QuickCheck.Test
Packit 1d8052
import Test.QuickCheck.Exception
Packit 1d8052
import Test.QuickCheck.Function
Packit 1d8052
#ifndef NO_TEMPLATE_HASKELL
Packit 1d8052
import Test.QuickCheck.All
Packit 1d8052
#endif
Packit 1d8052
Packit 1d8052
--------------------------------------------------------------------------
Packit 1d8052
-- the end.