module Test.QuickCheck.Hedgehog (
hedgehog
) where
import Control.Monad.Trans.Maybe (runMaybeT)
import Data.Functor.Identity (runIdentity)
import Hedgehog
import Hedgehog.Internal.Gen (runGenT)
import qualified Hedgehog.Internal.Seed as Seed
import Hedgehog.Internal.Tree (Tree(..), Node(..))
import qualified Test.QuickCheck as QuickCheck
genSeed :: QuickCheck.Gen Seed
genSeed =
Seed.from <$> QuickCheck.arbitraryBoundedIntegral
hedgehog :: Gen a -> QuickCheck.Gen a
hedgehog gen =
let
loop n =
if n <= 0 then
QuickCheck.discard
else do
seed <- genSeed
size <- QuickCheck.sized (pure . fromIntegral)
case runIdentity . runMaybeT . runTree $ runGenT size seed gen of
Nothing ->
loop (n 1)
Just x ->
pure $ nodeValue x
in
loop (100 :: Int)