-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | QuickCheck instance for 'NonEmpty' -- -- QuickCheck instance for NonEmpty. @package nonempty-wrapper-quickcheck @version 0.1.0.0 -- | QuickCheck's Arbitrary instance for NonEmpty. module Test.QuickCheck.Instances.NonEmpty -- | Random generation and shrinking of values. -- -- QuickCheck provides Arbitrary instances for most types in -- base, except those which incur extra dependencies. For a -- wider range of Arbitrary instances see the -- quickcheck-instances package. class Arbitrary a -- | A generator for values of the given type. -- -- It is worth spending time thinking about what sort of test data you -- want - good generators are often the difference between finding bugs -- and not finding them. You can use sample, label and -- classify to check the quality of your test data. -- -- There is no generic arbitrary implementation included because -- we don't know how to make a high-quality one. If you want one, -- consider using the testing-feat or generic-random -- packages. -- -- The QuickCheck manual goes into detail on how to write good -- generators. Make sure to look at it, especially if your type is -- recursive! arbitrary :: Arbitrary a => Gen a -- | Produces a (possibly) empty list of all the possible immediate shrinks -- of the given value. -- -- The default implementation returns the empty list, so will not try to -- shrink the value. If your data type has no special invariants, you can -- enable shrinking by defining shrink = genericShrink, -- but by customising the behaviour of shrink you can often get -- simpler counterexamples. -- -- Most implementations of shrink should try at least three -- things: -- --
-- data Tree a = Nil | Branch a (Tree a) (Tree a) ---- -- We can then define shrink as follows: -- --
-- shrink Nil = [] -- shrink (Branch x l r) = -- -- shrink Branch to Nil -- [Nil] ++ -- -- shrink to subterms -- [l, r] ++ -- -- recursively shrink subterms -- [Branch x' l' r' | (x', l', r') <- shrink (x, l, r)] ---- -- There are a couple of subtleties here: -- --
-- shrink x = shrinkToNil x ++ genericShrink x -- where -- shrinkToNil Nil = [] -- shrinkToNil (Branch _ l r) = [Nil] ---- -- genericShrink is a combination of subterms, which -- shrinks a term to any of its subterms, and recursivelyShrink, -- which shrinks all subterms of a term. These may be useful if you need -- a bit more control over shrinking than genericShrink gives you. -- -- A final gotcha: we cannot define shrink as simply -- shrink x = Nil:genericShrink x as this shrinks -- Nil to Nil, and shrinking will go into an infinite -- loop. -- -- If all this leaves you bewildered, you might try shrink = -- genericShrink to begin with, after deriving -- Generic for your type. However, if your data type has any -- special invariants, you will need to check that genericShrink -- can't break those invariants. shrink :: Arbitrary a => a -> [a] instance (Test.QuickCheck.Arbitrary.Arbitrary a, GHC.Base.Semigroup a, Data.NonEmpty.NonEmptySingleton a, Data.NonEmpty.NonEmptyFromContainer a, Test.QuickCheck.Arbitrary.Arbitrary (Data.NonEmpty.NonEmptySingletonElement a)) => Test.QuickCheck.Arbitrary.Arbitrary (Data.NonEmpty.NonEmpty a)