module Test.Validity.Relations.Symmetry
( symmetricOnElems
, symmetryOnGens
, symmetryOnValid
, symmetry
, symmetryOnArbitrary
) where
import Data.GenValidity
import Test.QuickCheck
import Test.Validity.Utils
symmetricOnElems
:: (a -> a -> Bool)
-> a -> a
-> Bool
symmetricOnElems func a b = func a b <==> func b a
symmetryOnGens
:: Show a
=> (a -> a -> Bool)
-> Gen (a, a)
-> Property
symmetryOnGens func gen =
forAll gen $ uncurry $ symmetricOnElems func
symmetryOnValid
:: (Show a, GenValidity a)
=> (a -> a -> Bool)
-> Property
symmetryOnValid func =
symmetryOnGens func genValid
symmetry
:: (Show a, GenValidity a)
=> (a -> a -> Bool)
-> Property
symmetry func =
symmetryOnGens func genUnchecked
symmetryOnArbitrary
:: (Show a, Arbitrary a)
=> (a -> a -> Bool)
-> Property
symmetryOnArbitrary func =
symmetryOnGens func arbitrary