Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

Interface module.

- smartCheck :: (SubTypes a, Generic a, ConNames (Rep a), Testable prop) => ScArgs -> (a -> prop) -> IO ()
- smartCheckInput :: forall a prop. (SubTypes a, Generic a, ConNames (Rep a), Testable prop, Read a) => ScArgs -> (a -> prop) -> IO ()
- runQC :: forall a prop. (Show a, Arbitrary a, Testable prop) => Args -> (a -> prop) -> IO (Maybe a, a -> Property)
- module Test.SmartCheck.Args
- class (Arbitrary a, Show a, Typeable a) => SubTypes a where
- gst :: GST f => f a -> Forest SubT
- grc :: (GST f, Typeable b) => f a -> Forest Subst -> b -> Maybe (f a)
- gtc :: GST f => f a -> String
- gsf :: GST f => f a -> Forest String

## Main SmartCheck interface.

smartCheck :: (SubTypes a, Generic a, ConNames (Rep a), Testable prop) => ScArgs -> (a -> prop) -> IO () Source #

Main interface function.

## User-suppplied counterexample interface.

smartCheckInput :: forall a prop. (SubTypes a, Generic a, ConNames (Rep a), Testable prop, Read a) => ScArgs -> (a -> prop) -> IO () Source #

## Run QuickCheck and get a result.

runQC :: forall a prop. (Show a, Arbitrary a, Testable prop) => Args -> (a -> prop) -> IO (Maybe a, a -> Property) Source #

Run QuickCheck, to get a counterexamples for each argument, including the
one we want to focus on for SmartCheck, which is the first argument. That
argument is never shrunk by QuickCheck, but others may be shrunk by
QuickCheck. Returns the value (if it exists) and a `Property`

(by applying
the `property`

method to the `Testable`

value). In each iteration of
`runQC`

, non-SmartCheck arguments are not necessarily held constant

## Arguments

module Test.SmartCheck.Args

## Main type class based on Generics.

class (Arbitrary a, Show a, Typeable a) => SubTypes a where Source #

This class covers algebraic datatypes that can be transformed into Trees. subTypes is the main method, placing values into trees.

for a datatype with constructors A and C,

subTypes (A (C 0) 1) [Node {rootLabel = C 0, subForest = []}]

subTypes :: a -> Forest SubT Source #

Turns algebraic data into a forest representation.

subTypes :: (Generic a, GST (Rep a)) => a -> Forest SubT Source #

Turns algebraic data into a forest representation.

baseType :: a -> Bool Source #

Base types (e.g., Int, Char) aren't analyzed.

replaceChild :: Typeable b => a -> Forest Subst -> b -> Maybe a Source #

Generically replace child i in m with value s. A total function: returns Nothing if you try to replace a child with an ill-typed child s. (Returns Just (the original data) if your index is out of bounds).

replaceChild :: (Generic a, GST (Rep a), Typeable b) => a -> Forest Subst -> b -> Maybe a Source #

Generically replace child i in m with value s. A total function: returns Nothing if you try to replace a child with an ill-typed child s. (Returns Just (the original data) if your index is out of bounds).

toConstr :: a -> String Source #

Get the string representation of the constructor.

toConstr :: (Generic a, GST (Rep a)) => a -> String Source #

Get the string representation of the constructor.

showForest :: a -> Forest String Source #

showForest generically shows a value while preserving its structure (in a Tree). Always returns either a singleton list containing the tree (a degenerate forest) or an empty list for baseTypes. An invariant is that the shape of the tree produced by showForest is the same as the one produced by subTypes.

showForest :: (Generic a, GST (Rep a)) => a -> Forest String Source #

showForest generically shows a value while preserving its structure (in a Tree). Always returns either a singleton list containing the tree (a degenerate forest) or an empty list for baseTypes. An invariant is that the shape of the tree produced by showForest is the same as the one produced by subTypes.