module WedgeSpec (
checkProps
) where
import qualified Control.Lens.SplitEpi as SE
import qualified Control.Lens.SplitMono as SM
import qualified Control.Lens.SplitMorphism as S
import Control.Lens.Wedge
import Test.QuickCheck
epi :: SE.SplitEpi Integer Int
epi = SE.SplitEpi fromInteger toInteger
mono :: SM.SplitMono Int Integer
mono = SM.SplitMono toInteger fromInteger
wedge :: Wedge Integer Integer
wedge = epi `S.composeSplitEpiMono` mono
prop_normalize_a :: Eq b => Wedge a b -> a -> Bool
prop_normalize_a w x =
get w (normalizeA w x) == get w x
prop_normalize_b :: Eq a => Wedge a b -> b -> Bool
prop_normalize_b w x =
reverseGet w (normalizeB w x) == reverseGet w x
prop_normalized_reverse_get_round_trip :: Eq b => Wedge a b -> b -> Bool
prop_normalized_reverse_get_round_trip w x =
(get w . reverseGet w) x' == x'
where
x' = normalizeB w x
prop_normalized_get_round_trip :: Eq a => Wedge a b -> a -> Bool
prop_normalized_get_round_trip w x =
(reverseGet w . get w) x' == x'
where
x' = normalizeA w x
checkProps :: IO ()
checkProps = do
quickCheck (prop_normalize_a wedge)
quickCheck (prop_normalize_b wedge)
quickCheck (prop_normalized_reverse_get_round_trip wedge)
quickCheck (prop_normalized_get_round_trip wedge)