content: -- | SmartCheck arguments.
  
  module Test.SmartCheck.Args
    ( ScArgs(..)
    , scStdArgs
    , Format(..)
    ) where
  
  import qualified Test.QuickCheck as Q
  
  -------------------------------------------------------------------------------
  
  data Format = PrintTree | PrintString
    deriving (Eq, Read, Show)
  
  data ScArgs =
    ScArgs { format       :: Format    -- ^ How to show extrapolated formula
                                       --------------
           , qcArgs       :: Q.Args    -- ^ QuickCheck arguments
                                       --------------
           , scMaxSize    :: Int       -- ^ Maximum size of data to generate, in
                                       --   terms of the size parameter of
                                       --   QuickCheck's Arbitrary instance for
                                       --   your data.
                                       --------------
           , scMaxDepth   :: Maybe Int -- ^ How many levels into the structure of
                                       --   the failed value should we descend
                                       --   when reducing or generalizing?
                                       --   Nothing means we go down to base
                                       --   types.
                                       --------------
           -- Reduction
           , scMaxReduce  :: Int       -- ^ How hard (number of rounds) to look
                                       --   for failure in the reduction stage.
                                       --------------
           -- Extrapolation
           , runForall    :: Bool      -- ^ Should we extrapolate?
                                       --------------
           , scMaxForall  :: Int       -- ^ How hard (number of rounds) to look
                                       --   for failures during the extrapolation
                                       --   stage.
                                       --------------
           , scMinForall  :: Int       -- ^ Minimum number of times a property's
                                       -- precondition must be passed to
                                       -- generalize it.
                                       --------------
           -- Constructor generalization
           , runExists    :: Bool      -- ^ Should we try to generalize
                                       --   constructors?
                                       --------------
           , scMaxExists  :: Int     -- ^ How hard (number of rounds) to look
                                       -- for failing values with each
                                       -- constructor.  For "wide" sum types, this
                                       -- value should be increased.
                                       --------------
           } deriving (Show, Read)
  
  --------------------------------------------------------------------------------
  
  scStdArgs :: ScArgs
  scStdArgs = ScArgs { format       = PrintTree
                     , qcArgs       = Q.stdArgs
                     , scMaxSize    = 10
                     , scMaxDepth   = Nothing
                     ---------------------
                     , scMaxReduce  = 100
                     ---------------------
                     , runForall    = True
                     , scMaxForall  = 20
                     , scMinForall  = 10
                     ---------------------
                     , runExists    = True
                     , scMaxExists  = 20
                     }
  
  --------------------------------------------------------------------------------
  