-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Automatic testing of Haskell programs
--   
--   A library for testing Haskell programs automatically. The programmer
--   provides a specification of the program, in the form of properties
--   which functions should satisfy, and QuickCheck then tests that the
--   properties hold in a large number of randomly generated cases.
--   Specifications are expressed in Haskell, using combinators defined in
--   the QuickCheck library. QuickCheck provides combinators to define
--   properties, observe the distribution of test data, and define test
--   data generators.
@package QuickCheck
@version 1.2.0.1


-- | QuickCheck v.0.2 DRAFT implementation; last update 000104. Koen
--   Claessen, John Hughes. This file represents work in progress, and
--   might change at a later date.
module Test.QuickCheck
quickCheck :: Testable a => a -> IO ()
verboseCheck :: Testable a => a -> IO ()
test :: Testable a => a -> IO ()
data Config
Config :: Int -> Int -> (Int -> Int) -> (Int -> [String] -> String) -> Config
configMaxTest :: Config -> Int
configMaxFail :: Config -> Int
configSize :: Config -> Int -> Int
configEvery :: Config -> Int -> [String] -> String
defaultConfig :: Config
check :: Testable a => Config -> a -> IO ()
forAll :: (Show a, Testable b) => Gen a -> (a -> b) -> Property
(==>) :: Testable a => Bool -> a -> Property
label :: Testable a => String -> a -> Property
collect :: (Show a, Testable b) => a -> b -> Property
classify :: Testable a => Bool -> String -> a -> Property
trivial :: Testable a => Bool -> a -> Property
data Gen a
elements :: [a] -> Gen a
two :: Monad m => m a -> m (a, a)
three :: Monad m => m a -> m (a, a, a)
four :: Monad m => m a -> m (a, a, a, a)
sized :: (Int -> Gen a) -> Gen a
resize :: Int -> Gen a -> Gen a
choose :: Random a => (a, a) -> Gen a
oneof :: [Gen a] -> Gen a
frequency :: [(Int, Gen a)] -> Gen a
vector :: Arbitrary a => Int -> Gen [a]
class Arbitrary a
arbitrary :: Arbitrary a => Gen a
coarbitrary :: Arbitrary a => a -> Gen b -> Gen b
rand :: Gen StdGen
promote :: (a -> Gen b) -> Gen (a -> b)
variant :: Int -> Gen a -> Gen a
class Testable a
property :: Testable a => a -> Property
data Property
data Result
Result :: Maybe Bool -> [String] -> [String] -> Result
ok :: Result -> Maybe Bool
stamp :: Result -> [String]
arguments :: Result -> [String]
generate :: Int -> StdGen -> Gen a -> a
evaluate :: Testable a => a -> Gen Result
instance (Arbitrary a, Show a, Testable b) => Testable (a -> b)
instance Testable Property
instance Testable Result
instance Testable Bool
instance Testable ()
instance (Arbitrary a, Arbitrary b) => Arbitrary (a -> b)
instance Arbitrary a => Arbitrary [a]
instance (Arbitrary a, Arbitrary b) => Arbitrary (Either a b)
instance Arbitrary a => Arbitrary (Maybe a)
instance (Arbitrary a, Arbitrary b, Arbitrary c, Arbitrary d) => Arbitrary (a, b, c, d)
instance (Arbitrary a, Arbitrary b, Arbitrary c) => Arbitrary (a, b, c)
instance (Arbitrary a, Arbitrary b) => Arbitrary (a, b)
instance Arbitrary Double
instance Arbitrary Float
instance Arbitrary Integer
instance Arbitrary Int
instance Arbitrary Bool
instance Arbitrary ()
instance Monad Gen
instance Functor Gen


-- | A batch driver for running QuickCheck.
--   
--   <i>Note:</i> in GHC only, it is possible to place a time limit on each
--   test, to ensure that testing terminates.
module Test.QuickCheck.Batch

-- | Run the test. Here we use the same random number each time, so we get
--   reproducable results!
run :: Testable a => a -> TestOptions -> IO TestResult

-- | Prints a one line summary of various tests with common theme
runTests :: String -> TestOptions -> [TestOptions -> IO TestResult] -> IO ()
defOpt :: TestOptions
data TestOptions
TestOptions :: Int -> Int -> Bool -> TestOptions

-- | number of tests to run.
no_of_tests :: TestOptions -> Int

-- | time limit for test, in seconds. If zero, no time limit. <i>Note:</i>
--   only GHC supports time limits.
length_of_tests :: TestOptions -> Int
debug_tests :: TestOptions -> Bool
data TestResult
TestOk :: String -> Int -> [[String]] -> TestResult
TestExausted :: String -> Int -> [[String]] -> TestResult
TestFailed :: [String] -> Int -> TestResult
TestAborted :: SomeException -> TestResult

-- | Look out behind you! These can be misused badly. However, in the
--   context of a batch tester, can also be very useful.
--   
--   Examples of use of bottom and isBottom:
--   
--   <pre>
--   {- test for abort -}
--   prop_head2 = isBottom (head [])
--   {- test for strictness -}
--   prop_head3 = isBottom (head bottom)
--   </pre>
isBottom :: a -> Bool
bottom :: a


-- | These are some general purpose utilities for use with QuickCheck.
module Test.QuickCheck.Utils
isAssociativeBy :: (Show a, Testable prop) => (a -> a -> prop) -> Gen a -> (a -> a -> a) -> Property
isAssociative :: (Arbitrary a, Show a, Eq a) => (a -> a -> a) -> Property
isCommutableBy :: (Show a, Testable prop) => (b -> b -> prop) -> Gen a -> (a -> a -> b) -> Property
isCommutable :: (Arbitrary a, Show a, Eq b) => (a -> a -> b) -> Property
isTotalOrder :: (Arbitrary a, Show a, Ord a) => a -> a -> Property


-- | This is an attempt to emulate polymorphic types for the purposes of
--   testing by using abstract monomorphic types.
--   
--   It is likely that future versions of QuickCheck will include some
--   polymorphic emulation testing facility, but this module can be used
--   for now.
module Test.QuickCheck.Poly
type ALPHA = Poly ALPHA_
type BETA = Poly BETA_
type GAMMA = Poly GAMMA_
type OrdALPHA = Poly OrdALPHA_
type OrdBETA = Poly OrdBETA_
type OrdGAMMA = Poly OrdGAMMA_
instance Eq ALPHA_
instance Eq BETA_
instance Eq GAMMA_
instance Eq OrdALPHA_
instance Ord OrdALPHA_
instance Eq OrdBETA_
instance Ord OrdBETA_
instance Eq OrdGAMMA_
instance Ord OrdGAMMA_
instance Ord a => Ord (Poly a)
instance Eq a => Eq (Poly a)
instance Arbitrary (Poly a)
instance Show (Poly a)



-- | <i>Deprecated: Use module Test.QuickCheck.Poly instead </i>
module Debug.QuickCheck.Poly


-- | These are some general purpose utilities for use with QuickCheck.

-- | <i>Deprecated: Use module Test.QuickCheck.Utils instead </i>
module Debug.QuickCheck.Utils


-- | This is a batch driver for running QuickCheck (GHC only).

-- | <i>Deprecated: Use module Test.QuickCheck.Batch instead </i>
module Debug.QuickCheck.Batch


-- | implementation moved to Test.QuickCheck

-- | <i>Deprecated: Use module Test.QuickCheck instead </i>
module Debug.QuickCheck
