module Test.Validity.Operations.Commutativity
(
commutativeOnGens
, commutativeOnValids
, commutative
, commutativeOnArbitrary
) where
import Data.GenValidity
import Test.Hspec
import Test.QuickCheck
commutativeOnGens
:: (Show a, Eq a)
=> (a -> a -> a)
-> Gen (a, a)
-> Property
commutativeOnGens op gen =
forAll gen $ \(a, b) ->
(a `op` b) `shouldBe` (b `op` a)
commutativeOnValids
:: (Show a, Eq a, GenValidity a)
=> (a -> a -> a)
-> Property
commutativeOnValids op
= commutativeOnGens op genValid
commutative
:: (Show a, Eq a, GenValidity a)
=> (a -> a -> a)
-> Property
commutative op
= commutativeOnGens op genUnchecked
commutativeOnArbitrary
:: (Show a, Eq a, Arbitrary a)
=> (a -> a -> a)
-> Property
commutativeOnArbitrary op
= commutativeOnGens op arbitrary