split-morphism-0.1.0.0: test/SplitEpiSpec.hs
module SplitEpiSpec (
checkProps
) where
import Control.Lens.SplitEpi
import Data.Maybe (fromMaybe)
import Test.QuickCheck
import Text.Read (readMaybe)
epi1 :: SplitEpi String Integer
epi1 = SplitEpi (fromMaybe 0 . readMaybe) show
epi2 :: SplitEpi Integer Int
epi2 = SplitEpi fromInteger toInteger
epi3 :: SplitEpi String Int
epi3 = epi1 `composeSplitEpi` epi2
prop_normalize :: Eq b => SplitEpi a b -> a -> Bool
prop_normalize epi x =
get epi (normalize epi x) == get epi x
prop_normalized_get_round_trip :: Eq a => SplitEpi a b -> a -> Bool
prop_normalized_get_round_trip epi x =
(reverseGet epi . get epi) x' == x'
where
x' = normalize epi x
prop_reverse_get_round_trip :: Eq b => SplitEpi a b -> b -> Bool
prop_reverse_get_round_trip epi x =
(get epi . reverseGet epi) x == x
checkProps :: IO ()
checkProps = do
quickCheck (prop_normalize epi1)
quickCheck (prop_normalize epi2)
quickCheck (prop_normalize epi3)
quickCheck (prop_normalized_get_round_trip epi1)
quickCheck (prop_normalized_get_round_trip epi2)
quickCheck (prop_normalized_get_round_trip epi3)
quickCheck (prop_reverse_get_round_trip epi1)
quickCheck (prop_reverse_get_round_trip epi2)
quickCheck (prop_reverse_get_round_trip epi3)