packages feed

sdp-quickcheck-0.2: src/Test/SDP/Eq.hs

{- |
    Module      :  Test.SDP.Eq
    Copyright   :  (c) Andrey Mulik 2019
    License     :  BSD-style
    Maintainer  :  work.a.mulik@gmail.com
    Portability :  portable
    
    @Test.SDP.Eq@ provides basic test suite for 'Eq' instances.
-}
module Test.SDP.Eq
(
  -- * Eq test
  TestEq, eqTest
)
where

default ()

--------------------------------------------------------------------------------

-- | TestEq is service type synonym for more comfortable quickCheck using.
type TestEq l = l -> l -> l -> Bool

--------------------------------------------------------------------------------

-- | eqTest is basic test suite for 'Eq' instances.
eqTest :: (Eq l) => l -> l -> l -> Bool
eqTest xs ys zs = and
  [
    -- transitive
    (xs == ys && ys == zs) <= (xs == zs),
    
    -- symmetric
    (xs == ys) == (ys == xs),
    
    -- reflexive
    xs == xs
  ]