{- |
Module : Test.SDP.Ord
Copyright : (c) Andrey Mulik 2019
License : BSD-style
Maintainer : work.a.mulik@gmail.com
Portability : portable
@Test.SDP.Ord@ provides basic test suite for 'Ord' instances.
-}
module Test.SDP.Ord
(
-- * Ord test
TestOrd, ordTest,
-- ** Lexicographic test
lexicographicOrdTest
)
where
import Prelude ()
import SDP.SafePrelude
import SDP.Linear
default ()
--------------------------------------------------------------------------------
-- | TestOrd is service type synonym for more comfortable quickCheck using.
type TestOrd l = l -> l -> l -> Bool
--------------------------------------------------------------------------------
-- | ordTest is basic test suite for 'Ord' instances.
ordTest :: (Ord l) => l -> l -> l -> Bool
ordTest xs ys zs = and
[
-- antisymmetry
(xs <= ys && ys <= xs) <= (xs == ys),
-- transitivity
(xs <= ys && ys <= zs) <= (xs <= zs),
-- totality
(xs <= ys) /= (xs > ys)
]
-- | lexicographicOrdTest checks 'Linear' structures for lexicographic order.
lexicographicOrdTest :: (Linear l e, Ord l, Ord e) => l -> l -> Bool
lexicographicOrdTest xs ys = (xs <=> ys) == (listL xs <=> listL ys)