-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | QuickCheck common typeclasses -- -- This library provides quickcheck properties to ensure that typeclass -- instances the set of laws that they are supposed to. There are other -- libraries that do similar things, such as `genvalidity-hspec` and -- checkers. This library differs from other solutions by not -- introducing any new typeclasses that the user needs to learn. The -- source code for this library should be easy to understand if you are -- already familiar with quickcheck. Open an issue if you feel that this -- is not the case. @package quickcheck-classes @version 0.3.2 -- | This library provides lists of properties that should hold for common -- typeclasses. All of these take a Proxy argument that is used to -- nail down the type for which the typeclass dictionaries should be -- tested. For example, at GHCi: -- --
--   >>> lawsCheck (monoidLaws (Proxy :: Proxy Ordering))
--   Monoid: Associative +++ OK, passed 100 tests.
--   Monoid: Left Identity +++ OK, passed 100 tests.
--   Monoid: Right Identity +++ OK, passed 100 tests.
--   
-- -- Assuming that the Arbitrary instance for Ordering is -- good, we now have confidence that the Monoid instance for -- Ordering satisfies the monoid laws. We can check multiple -- typeclasses with: -- --
--   >>> foldMap (lawsCheck . ($ (Proxy :: Proxy Word))) [jsonLaws,showReadLaws]
--   ToJSON/FromJSON: Encoding Equals Value +++ OK, passed 100 tests.
--   ToJSON/FromJSON: Partial Isomorphism +++ OK, passed 100 tests.
--   Show/Read: Partial Isomorphism +++ OK, passed 100 tests.
--   
module Test.QuickCheck.Classes -- | A convenience function for working testing properties in GHCi. See the -- test suite of this library for an example of how to integrate multiple -- properties into larger test suite. lawsCheck :: Laws -> IO () -- | A convenience function for checking multiple typeclass instances of -- multiple types. lawsCheckMany :: [(String, [Laws])] -> IO () -- | Tests the following properties: -- -- semigroupLaws :: (Semigroup a, Eq a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests the following properties: -- -- monoidLaws :: (Monoid a, Eq a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests everything from monoidProps plus the following: -- -- commutativeMonoidLaws :: (Monoid a, Eq a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests the following properties: -- -- -- -- Some of these properties involve implication. In the case that the -- left hand side of the implication arrow does not hold, we do not -- retry. Consequently, these properties only end up being useful when -- the data type has a small number of inhabitants. eqLaws :: (Eq a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests the following properties: -- -- ordLaws :: (Ord a, Arbitrary a, Show a) => Proxy a -> Laws showReadLaws :: (Show a, Read a, Eq a, Arbitrary a) => Proxy a -> Laws -- | Tests the following properties: -- -- -- -- Note that in the second propertiy, the type of decode is -- ByteString -> Value, not ByteString -> a jsonLaws :: (ToJSON a, FromJSON a, Show a, Arbitrary a, Eq a) => Proxy a -> Laws -- | Tests the following properties: -- -- isListLaws :: (IsList a, Show a, Show (Item a), Arbitrary a, Arbitrary (Item a), Eq a) => Proxy a -> Laws -- | Test that a Prim instance obey the several laws. primLaws :: (Prim a, Eq a, Arbitrary a, Show a) => Proxy a -> Laws storableLaws :: (Storable a, Eq a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests the following properties: -- -- integralLaws :: (Integral a, Arbitrary a, Show a) => Proxy a -> Laws -- | Tests the following applicative properties: -- -- functorLaws :: (Functor f, Eq1 f, Show1 f, Arbitrary1 f) => Proxy f -> Laws -- | Tests the following applicative properties: -- -- applicativeLaws :: (Applicative f, Eq1 f, Show1 f, Arbitrary1 f) => Proxy f -> Laws -- | Tests the following monadic properties: -- -- monadLaws :: (Monad f, Eq1 f, Show1 f, Arbitrary1 f) => Proxy f -> Laws -- | Tests the following Foldable properties: -- -- -- -- Note that this checks to ensure that foldl' and -- foldr' are suitably strict. foldableLaws :: (Foldable f, Eq1 f, Show1 f, Arbitrary1 f) => Proxy f -> Laws -- | A set of laws associated with a typeclass. data Laws Laws :: String -> [(String, Property)] -> Laws -- | Name of the typeclass whose laws are tested [lawsTypeclass] :: Laws -> String -- | Pairs of law name and property [lawsProperties] :: Laws -> [(String, Property)] instance GHC.Classes.Eq Test.QuickCheck.Classes.EquationTwo instance GHC.Classes.Eq Test.QuickCheck.Classes.Equation instance GHC.Classes.Eq Test.QuickCheck.Classes.LinearEquation instance GHC.Classes.Eq a => GHC.Classes.Eq (Test.QuickCheck.Classes.Bottom a) instance GHC.Classes.Eq Test.QuickCheck.Classes.LastNothing instance GHC.Classes.Eq Test.QuickCheck.Classes.ChooseFirst instance GHC.Classes.Eq Test.QuickCheck.Classes.ChooseSecond instance GHC.Show.Show Test.QuickCheck.Classes.EquationTwo instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.EquationTwo instance GHC.Show.Show Test.QuickCheck.Classes.Equation instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.Equation instance Data.Functor.Classes.Eq1 m => GHC.Classes.Eq (Test.QuickCheck.Classes.LinearEquationM m) instance Data.Functor.Classes.Show1 m => GHC.Show.Show (Test.QuickCheck.Classes.LinearEquationM m) instance Test.QuickCheck.Arbitrary.Arbitrary1 m => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Classes.LinearEquationM m) instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.LinearEquation instance (Data.Functor.Classes.Eq1 f, GHC.Classes.Eq a) => GHC.Classes.Eq (Test.QuickCheck.Classes.Apply f a) instance (Data.Functor.Classes.Show1 f, GHC.Show.Show a) => GHC.Show.Show (Test.QuickCheck.Classes.Apply f a) instance (Test.QuickCheck.Arbitrary.Arbitrary1 f, Test.QuickCheck.Arbitrary.Arbitrary a) => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Classes.Apply f a) instance GHC.Show.Show a => GHC.Show.Show (Test.QuickCheck.Classes.Bottom a) instance Test.QuickCheck.Arbitrary.Arbitrary a => Test.QuickCheck.Arbitrary.Arbitrary (Test.QuickCheck.Classes.Bottom a) instance GHC.Show.Show Test.QuickCheck.Classes.LastNothing instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.LastNothing instance GHC.Show.Show Test.QuickCheck.Classes.ChooseFirst instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.ChooseFirst instance GHC.Show.Show Test.QuickCheck.Classes.ChooseSecond instance Test.QuickCheck.Arbitrary.Arbitrary Test.QuickCheck.Classes.ChooseSecond instance GHC.Base.Monoid Test.QuickCheck.Classes.Status