| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Description | |||||||||||||||||||||||||||||||||||||||||

Note: /This module is unfinished and experimental. However, I do not think that I will ever finish it, so I have released it in its current state. The documentation below may not be completely correct. The source code lists some things which should be addressed./ A framework for generating possibly non-strict, partial, continuous functions. The functions generated using the standard QuickCheck Using type Cogen a = forall b. a -> Gen b -> Gen b integer :: Gen Integer integer = frequency [ (1, return bottom), (10, arbitrary) ] coBool :: CoGen Bool coBool b | isBottom b = variant 0 coBool False = variant 1 coBool True = variant 2 function :: Cogen a -> Gen b -> Gen (a -> b) function coGen gen = promote (\a -> coGen a gen) we can generate possibly non-strict functions from Sometimes using possibly non-monotone functions is good enough,
since that set of functions is a superset of the continuous
functions. However, say that we want to test that By avoiding - First the argument to the function is turned into a
`PatternMatch`. A`PatternMatch`wraps up the pattern match on the top-level constructor of the argument, plus all further pattern matches on the children of the argument. Just like when`coarbitrary`is used a pattern match is represented as a generator transformer. The difference here is that there is not just one transformation per input, but one transformation per constructor in the input.`PatternMatch`es can be constructed generically using`match`. - Then the result is generated, almost like for a normal
`Arbitrary`instance. However, for each constructor generated a subset of the transformations from step 1 are applied. This transformation application is wrapped up in the function`transform`.
The net result of this is that some pattern matches are performed later, or not at all, so functions can be lazy. Here is an example illustrating typical use of this framework: data Tree a = Branch (Tree a) (Tree a) | Leaf a deriving (Show, Typeable, Data) finiteTreeOf :: MakeResult a -> MakeResult (Tree a) finiteTreeOf makeResult = sized' tree where tree size = transform $ if size == 0 then baseCase else frequency' [ (1, baseCase) , (1, liftM2 Branch tree' tree') ] where tree' = tree (size `div` 2) baseCase = frequency' [ (1, return bottom) , (2, liftM Leaf makeResult) ] Note the use of forAll (functionTo (finiteTreeOf flat)) $ \(f :: Bool -> Tree Integer) -> ... | |||||||||||||||||||||||||||||||||||||||||

Synopsis | |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Basic framework | |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Generator for continuous, not necessarily strict functions. Functions are generated by first generating pattern matches, and then generating a result. | |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

The type of a generator transformer. | |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

The type of a PatternMatch generator.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

transform makes sure that the pattern matches get to influence
the generated value. See MakeResult.
| |||||||||||||||||||||||||||||||||||||||||

Liftings of some QuickCheck functionality | |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of a Gen.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of arbitrary.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of choose.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of elements.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of oneof.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of frequency.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of sized.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Lifting of resize.
| |||||||||||||||||||||||||||||||||||||||||

Generic MakePM
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

Generic implementation of PatternMatch construction.
| |||||||||||||||||||||||||||||||||||||||||

Some MakeResults
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

An implementation of which is suitable when MakeResult aa
is flat and has an Arbitrary instance. Yields bottoms around 10%
of the time.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

This MakeResult yields finite partial lists.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

This MakeResult yields infinite partial lists.
| |||||||||||||||||||||||||||||||||||||||||

| |||||||||||||||||||||||||||||||||||||||||

This MakeResult yields finite or infinite partial lists.
| |||||||||||||||||||||||||||||||||||||||||

Produced by Haddock version 2.4.2 |