Use QuickCheck generators in Hedgehog and vice versa.
Use QuickCheck generators in Hedgehog and vice versa.
Hedgehog is a modern property-based testing system, in the spirit of QuickCheck. Hedgehog uses integrated shrinking, so shrinks obey the invariants of generated values by construction.
To get started quickly, see the examples: <https://github.com/hedgehogqa/haskell-hedgehog/tree/master/hedgehog-
hedgehog-quickcheck [![Hackage][hackage-shield]][hackage]
Hedgehog will eat all your bugs.
Use QuickCheck generators in Hedgehog and vice versa.
Example
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.