module Test.Validity.Operations.Identity
(
leftIdentityOnElemWithEquality
, leftIdentityOnGenWithEquality
, leftIdentityOnGen
, leftIdentityOnValid
, leftIdentity
, rightIdentityOnElemWithEquality
, rightIdentityOnGenWithEquality
, rightIdentityOnGen
, rightIdentityOnValid
, rightIdentity
, identityOnGen
, identityOnValid
, identity
) where
import Data.GenValidity
import Test.QuickCheck
leftIdentityOnElemWithEquality
:: (b -> a -> a)
-> (a -> a -> Bool)
-> b
-> a
-> Bool
leftIdentityOnElemWithEquality op eq b a = (b `op` a) `eq` a
leftIdentityOnGenWithEquality
:: Show a
=> (b -> a -> a)
-> (a -> a -> Bool)
-> b
-> Gen a
-> Property
leftIdentityOnGenWithEquality op eq b gen =
forAll gen $ leftIdentityOnElemWithEquality op eq b
leftIdentityOnGen
:: (Show a, Eq a)
=> (b -> a -> a)
-> b
-> Gen a
-> Property
leftIdentityOnGen op = leftIdentityOnGenWithEquality op (==)
leftIdentityOnValid
:: (Show a, Eq a, GenValidity a)
=> (b -> a -> a)
-> b
-> Property
leftIdentityOnValid op b
= leftIdentityOnGen op b genValid
leftIdentity
:: (Show a, Eq a, GenValidity a)
=> (b -> a -> a)
-> b
-> Property
leftIdentity op b
= leftIdentityOnGen op b genUnchecked
rightIdentityOnElemWithEquality
:: (a -> b -> a)
-> (a -> a -> Bool)
-> b
-> a
-> Bool
rightIdentityOnElemWithEquality op eq b a = (a `op` b) `eq` a
rightIdentityOnGenWithEquality
:: Show a
=> (a -> b -> a)
-> (a -> a -> Bool)
-> b
-> Gen a
-> Property
rightIdentityOnGenWithEquality op eq b gen =
forAll gen $ rightIdentityOnElemWithEquality op eq b
rightIdentityOnGen
:: (Show a, Eq a)
=> (a -> b -> a)
-> b
-> Gen a
-> Property
rightIdentityOnGen op = rightIdentityOnGenWithEquality op (==)
rightIdentityOnValid
:: (Show a, Eq a, GenValidity a)
=> (a -> b -> a)
-> b
-> Property
rightIdentityOnValid op b
= rightIdentityOnGen op b genValid
rightIdentity
:: (Show a, Eq a, GenValidity a)
=> (a -> b -> a)
-> b
-> Property
rightIdentity op b
= rightIdentityOnGen op b genUnchecked
identityOnGen
:: (Show a, Eq a)
=> (a -> a -> a)
-> a
-> Gen a
-> Property
identityOnGen op e gen =
leftIdentityOnGen op e gen .&&. rightIdentityOnGen op e gen
identityOnValid
:: (Show a, Eq a, GenValidity a)
=> (a -> a -> a)
-> a
-> Property
identityOnValid op a
= identityOnGen op a genValid
identity
:: (Show a, Eq a, GenValidity a)
=> (a -> a -> a)
-> a
-> Property
identity op e
= identityOnGen op e genUnchecked