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)