{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-| Module: Spec.Utils Copyright: (C) 2014-2015 Ryan Scott License: BSD-style (see the file LICENSE) Maintainer: Ryan Scott Stability: Provisional Portability: GHC @QuickCheck@ property-related utility functions. -} module Spec.Utils ( prop_matchesTextShow , prop_genericTextShow , prop_genericTextShow1 ) where #if __GLASGOW_HASKELL__ >= 704 import GHC.Generics (Generic, Rep) # if __GLASGOW_HASKELL__ >= 706 import GHC.Generics (Generic1, Rep1) # endif import TextShow.Generic #endif import TextShow (TextShow(..), FromStringShow(..)) #if __GLASGOW_HASKELL__ >= 706 import TextShow (TextShow1(..), Builder) #endif -- | Verifies that a type's @Show@ instances coincide for both 'String's and 'Text', -- irrespective of precedence. prop_matchesTextShow :: (Show a, TextShow a) => Int -> a -> Bool prop_matchesTextShow p x = showbPrec p (FromStringShow x) == showbPrec p x -- | Verifies that a type's 'TextShow' instance coincides with the output produced -- by the equivalent 'Generic' functions. #if __GLASGOW_HASKELL__ >= 704 prop_genericTextShow :: (TextShow a, Generic a, GTextShow (Rep a)) => Int -> a -> Bool prop_genericTextShow p x = showbPrec p x == genericShowbPrec p x #else prop_genericTextShow :: Int -> a -> Bool prop_genericTextShow _ _ = True #endif -- | Verifies that a type's 'TextShow1' instance coincides with the output produced -- by the equivalent 'Generic1' functions. #if __GLASGOW_HASKELL__ >= 706 prop_genericTextShow1 :: (TextShow1 f, Generic1 f, GTextShow1 (Rep1 f)) => Int -> f a -> Bool prop_genericTextShow1 p x = showbPrecWith showb27Prec p x == genericShowbPrecWith showb27Prec p x #else prop_genericTextShow1 :: Int -> f a -> Bool prop_genericTextShow1 _ _ = True #endif #if __GLASGOW_HASKELL__ >= 706 -- | Show the number 27, which certain parody singer-songwriters find humorous. -- Useful for testing higher-order 'TextShow' classes. showb27Prec :: Int -> a -> Builder showb27Prec p _ = showbPrec p $ Just (27 :: Int) #endif