module Test.QuickCheck.Assertions (
binAsrt
, (?==)
, (==?)
, (/=?)
, (?/=)
, (>?)
, (<?)
, (?>)
, (?<)
, (>=?)
, (<=?)
, (?>=)
, (?<=)
, (~==?)
, (?~==)
) where
import Test.QuickCheck.Property
import Data.AEq
binAsrt :: String
-> Bool
-> Result
binAsrt fmt pre = if pre
then succeeded
else failed {reason = fmt}
(?==) :: (Eq a, Show a) => a -> a -> Result
(?==) a b = binAsrt s (a == b)
where
s = "\n>>>>>>>>>>>>>> expected\n"
++ show b ++
"\n>>>>>>>>>>>>>> but got\n"
++ show a
(==?) :: (Eq a, Show a) => a -> a -> Result
(==?) = flip (?==)
(?/=):: (Eq a, Show a) => a -> a -> Result
(?/=) a b = binAsrt s (a /= b)
where
s = "\n>>>>>>>>>>>>>> expected the value\n"
++ show a ++
"\n>>>>>>>>>>>>>> should not equal to\n"
++ show b
(/=?) :: (Eq a, Show a) => a -> a -> Result
(/=?) = flip (?/=)
binOrdering :: (Show a, Ord a)
=> (Ordering -> Bool)
-> String
-> a
-> a
-> Result
binOrdering pre fmt a b = binAsrt s (pre $ compare a b)
where
s = "\n>>>>>>>>>>>>>> the value\n"
++ show a ++
"\n>>>>>>>>>>>>>> should be " ++ fmt ++ " than value\n"
++ show b
(?>) :: (Show a, Ord a) => a -> a -> Result
(?>) a b = binOrdering (== GT) "greater" a b
(?<) :: (Show a, Ord a) => a -> a -> Result
(?<) a b = binOrdering (== LT) "less" a b
(>?) :: (Show a, Ord a) => a -> a -> Result
(>?) = flip (?<)
(<?) :: (Show a, Ord a) => a -> a -> Result
(<?) = flip (?>)
(?>=) :: (Show a, Ord a) => a -> a -> Result
(?>=) a b = binOrdering (\x -> x == EQ || x == GT) "greater or equal" a b
(?<=) :: (Show a, Ord a) => a -> a -> Result
(?<=) a b = binOrdering (\x -> x == EQ || x == LT) "less or equal" a b
(>=?) :: (Show a, Ord a) => a -> a -> Result
(>=?) = flip (?<=)
(<=?) :: (Show a, Ord a) => a -> a -> Result
(<=?) = flip (?>=)
(?~==) :: (AEq a, Show a) => a -> a -> Result
(?~==) a b = binAsrt s (a ~== b)
where
s = "\n>>>>>>>>>>>>>> The value\n"
++ show a ++
"\n>>>>>>>>>>>>>> should be almost equal to\n"
++ show b
(~==?) :: (AEq a, Show a) => a -> a -> Result
(~==?) = flip (?~==)