refined-0.5: test/QuickCheck.hs
{-# language
DataKinds
, GeneralizedNewtypeDeriving
, ScopedTypeVariables
, TypeApplications
, TypeOperators
, ViewPatterns
#-}
module Main (main) where
import Test.QuickCheck
import Refined
main :: IO ()
main = mapM_ quickCheck
[ prop_lt
, prop_gt
, prop_from
, prop_to
, prop_bad
]
iddy :: (Eq a) => Refined p a -> Bool
iddy (unrefine -> r) = r == r
prop_lt :: Property
prop_lt = property $ \(r :: Refined (LessThan 5) MyInt) -> iddy r
prop_gt :: Property
prop_gt = property $ \(r :: Refined (GreaterThan 5) MyInt) -> iddy r
prop_from :: Property
prop_from = property $ \(r :: Refined (From 9) MyInt) -> iddy r
prop_to :: Property
prop_to = property $ \(r :: Refined (To 9) MyInt) -> iddy r
prop_bad :: Property
prop_bad = expectFailure $ \(r :: Refined (EqualTo 2 && EqualTo 3) MyInt) -> iddy r
newtype MyInt = MyInt Int
deriving (Eq, Ord, Show, Num)
instance Arbitrary MyInt where
arbitrary = MyInt <$> choose (0,100)