hedgehog-0.2.2: test/Test/Hedgehog/Text.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Test.Hedgehog.Text where
import Data.Int (Int64)
import Data.Typeable (Typeable)
import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range
import Text.Read (readEither)
genSize :: Monad m => Gen m Size
genSize =
Size <$> Gen.enumBounded
genOdd :: Monad m => Gen m Int64
genOdd =
let
mkOdd x =
if odd x then
x
else
pred x
in
mkOdd <$> Gen.int64 (Range.constant 1 maxBound)
genSeed :: Monad m => Gen m Seed
genSeed =
Seed <$> Gen.enumBounded <*> genOdd
genPrecedence :: Monad m => Gen m Int
genPrecedence =
Gen.int (Range.constant 0 11)
genString :: Monad m => Gen m String
genString =
Gen.string (Range.constant 0 100) Gen.alpha
checkShowAppend :: (Typeable a, Show a) => Gen IO a -> Property
checkShowAppend gen =
property $ do
prec <- forAll genPrecedence
x <- forAll gen
xsuffix <- forAll genString
ysuffix <- forAll genString
showsPrec prec x xsuffix ++ ysuffix === showsPrec prec x (xsuffix ++ ysuffix)
trippingReadShow :: (Eq a, Typeable a, Show a, Read a) => Gen IO a -> Property
trippingReadShow gen =
property $ do
prec <- forAll genPrecedence
x <- forAll gen
tripping x (\z -> showsPrec prec z "") readEither
prop_show_append_size :: Property
prop_show_append_size =
checkShowAppend genSize
prop_tripping_append_size :: Property
prop_tripping_append_size =
trippingReadShow genSize
prop_show_append_seed :: Property
prop_show_append_seed =
checkShowAppend genSeed
prop_tripping_append_seed :: Property
prop_tripping_append_seed =
trippingReadShow genSeed
tests :: IO Bool
tests =
checkParallel $$(discover)