Hedgehog will eat all your bugs.
Use QuickCheck generators in Hedgehog and vice versa.
The Hedgehog.Gen.QuickCheck module allows the use of QuickCheck generators inside Hedgehog.
{-# LANGUAGE TemplateHaskell #-}
import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Gen.QuickCheck as Gen
import qualified Hedgehog.Range as Range
Once you have your imports set up, you can write a property which mixes QuickCheck and Hedgehog generators together:
prop_reverse :: Property
prop_reverse =
property $ do
xs <- forAll $ Gen.list (Range.linear 0 100) (Gen.arbitrary :: Gen Char)
reverse (reverse xs) === xs
And add the Template Haskell splice which will discover your properties:
tests :: IO Bool
tests =
checkParallel $$(discover)
You can then load the module in GHCi, and run it:
λ tests
━━━ Test.Example ━━━
✓ prop_reverse passed 100 tests.