{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} -- | To use the 'Spec' functions in this module, you will need @TypeApplications@. -- -- -- The most interesting functions in this module for most uses are: -- -- * 'genValidSpec' -- * 'eqSpec' -- * 'ordSpec' -- * 'producesValid' -- * 'forAllValid' -- * 'shouldBeValid' module Test.Syd.Validity ( -- * Writing properties -- ** Cheap generation with shrinking forAllValid, -- ** Cheap assertions shouldBeValid, shouldBeInvalid, -- * Tests for GenValidity instances genValidSpec, genValidGeneratesValid, genGeneratesValid, shrinkValidSpec, shrinkValidSpecWithLimit, shrinkValidPreservesValidOnGenValid, shrinkPreservesValidOnGenValid, shrinkValidPreservesValid, shrinkingStaysValid, shrinkingPreserves, -- * Tests for Arbitrary instances involving Validity arbitrarySpec, arbitraryGeneratesOnlyValid, -- * Standard tests involving functions -- ** Standard tests involving validity producesValidsOnGen, producesValid, producesValidsOnArbitrary, producesValidsOnGens2, producesValid2, producesValidsOnArbitrary2, producesValidsOnGens3, producesValid3, producesValidsOnArbitrary3, -- ** Standard tests involving functions that can fail CanFail (..), succeedsOnGen, succeeds, succeedsOnArbitrary, succeedsOnGens2, succeeds2, succeedsOnArbitrary2, failsOnGen, failsOnGens2, validIfSucceedsOnGen, validIfSucceedsOnArbitrary, validIfSucceeds, validIfSucceedsOnGens2, validIfSucceeds2, validIfSucceedsOnArbitrary2, validIfSucceedsOnGens3, validIfSucceeds3, validIfSucceedsOnArbitrary3, -- ** Standard tests involving equivalence of functions -- *** Simple functions -- **** One argument equivalentOnGen, equivalent, equivalentOnArbitrary, -- **** Two arguments equivalentOnGens2, equivalent2, equivalentOnArbitrary2, -- **** Three arguments equivalentOnGens3, equivalent3, equivalentOnArbitrary3, -- *** First function can fail -- **** One argument equivalentWhenFirstSucceedsOnGen, equivalentWhenFirstSucceeds, equivalentWhenFirstSucceedsOnArbitrary, -- **** Two arguments equivalentWhenFirstSucceedsOnGens2, equivalentWhenFirstSucceeds2, equivalentWhenFirstSucceedsOnArbitrary2, -- *** Second function can fail -- **** One argument equivalentWhenSecondSucceedsOnGen, equivalentWhenSecondSucceeds, equivalentWhenSecondSucceedsOnArbitrary, -- **** Two arguments equivalentWhenSecondSucceedsOnGens2, equivalentWhenSecondSucceeds2, equivalentWhenSecondSucceedsOnArbitrary2, -- *** Both functions can fail -- **** One argument equivalentWhenSucceedOnGen, equivalentWhenSucceed, equivalentWhenSucceedOnArbitrary, -- **** Two arguments equivalentWhenSucceedOnGens2, equivalentWhenSucceed2, equivalentWhenSucceedOnArbitrary2, -- ** Standard tests involving inverse functions inverseFunctionsOnGen, inverseFunctions, inverseFunctionsOnArbitrary, inverseFunctionsIfFirstSucceedsOnGen, inverseFunctionsIfFirstSucceeds, inverseFunctionsIfFirstSucceedsOnArbitrary, inverseFunctionsIfSecondSucceedsOnGen, inverseFunctionsIfSecondSucceeds, inverseFunctionsIfSecondSucceedsOnArbitrary, inverseFunctionsIfSucceedOnGen, inverseFunctionsIfSucceed, inverseFunctionsIfSucceedOnArbitrary, -- ** Properties involving idempotence idempotentOnGen, idempotent, idempotentOnArbitrary, -- * Properties of relations -- ** Reflexivity reflexiveOnElem, reflexivityOnGen, reflexivity, reflexivityOnArbitrary, -- ** Transitivity transitiveOnElems, transitivityOnGens, transitivity, transitivityOnArbitrary, -- ** Antisymmetry antisymmetricOnElemsWithEquality, antisymmetryOnGensWithEquality, antisymmetryOnGens, antisymmetry, antisymmetryOnArbitrary, -- ** Antireflexivity antireflexiveOnElem, antireflexivityOnGen, antireflexivity, antireflexivityOnArbitrary, -- ** Symmetry symmetricOnElems, symmetryOnGens, symmetry, symmetryOnArbitrary, -- * Properties of operations -- ** Identity element -- *** Left Identity leftIdentityOnElemWithEquality, leftIdentityOnGenWithEquality, leftIdentityOnGen, leftIdentity, leftIdentityOnArbitrary, -- *** Right Identity rightIdentityOnElemWithEquality, rightIdentityOnGenWithEquality, rightIdentityOnGen, rightIdentity, rightIdentityOnArbitrary, -- *** Identity identityOnGen, identity, identityOnArbitrary, -- ** Associativity associativeOnGens, associative, associativeOnArbitrary, -- ** Commutativity commutativeOnGens, commutative, commutativeOnArbitrary, -- * Show and Read properties showReadSpec, showReadSpecOnArbitrary, showReadSpecOnGen, -- * Eq properties eqSpec, eqSpecOnArbitrary, eqSpecOnGen, -- * Ord properties ordSpecOnGen, ordSpec, ordSpecOnArbitrary, -- * Monoid properties monoidSpec, monoidSpecOnArbitrary, monoidSpecOnGen, -- * Functor properties functorSpec, functorSpecOnArbitrary, functorSpecOnGens, -- * Applicative properties applicativeSpec, applicativeSpecOnArbitrary, applicativeSpecOnGens, -- * Monad properties monadSpec, monadSpecOnArbitrary, monadSpecOnGens, -- * Re-exports module Data.GenValidity, ) where import Data.GenValidity import Test.Syd.Validity.Applicative import Test.Syd.Validity.Arbitrary import Test.Syd.Validity.Eq import Test.Syd.Validity.Functions import Test.Syd.Validity.Functor import Test.Syd.Validity.GenValidity import Test.Syd.Validity.Monad import Test.Syd.Validity.Monoid import Test.Syd.Validity.Operations import Test.Syd.Validity.Ord import Test.Syd.Validity.Property import Test.Syd.Validity.Show import Test.Syd.Validity.Shrinking import Test.Syd.Validity.Utils