lawful-classes-quickcheck-0.1.2.1: QuickCheck support for lawful-classes
Copyright(c) 2023 Nicolas Trangez
LicenseApache-2.0
Maintainerikke@nicolast.be
Stabilityalpha
Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.Lawful.QuickCheck

Description

Support code to check lawful-classes laws using QuickCheck and, optionally, Tasty.

Synopsis

Tasty integration

testLaws :: TestName -> (forall a. m a -> PropertyM IO a) -> Laws m -> TestTree Source #

Given Laws for m and a way to evaluate an m a in PropertyM IO, create a tasty TestTree.

testLawsWith :: (Property -> Property) -> TestName -> (forall a. m a -> PropertyM IO a) -> Laws m -> TestTree Source #

Given Laws for m and a way to evaluate an m a in PropertyT IO, create a tasty TestTree, modifying all created Propertys with the given function.

As an example, once could be used to run every test only once, e.g., because m is not a transformer so there's no way to generate multiple test exemplars using some generator, except for the trivial constant generator.

Since: 0.1.1.0

Utilities

forAll :: (MonadTrans t, Monad m, Show a) => Gen a -> t (PropertyM m) a Source #

Lifted version of pick.

This can be used to easily create generators for laws which need them.

Note: like pick, values generated by forAll do not shrink.

forAllShow :: (MonadTrans t, Monad m) => (a -> String) -> Gen a -> t (PropertyM m) a Source #

Like forAll, but for types without a Show instance (or, for which another stringification functions but show should be used).

Like forAllShow, but in a monadic context.

This can be used to earily create generators for laws which need them.

Note: like forAll, values generated by forAllShow do not shrink.

Plumbing

toProperty :: (forall a. m a -> PropertyM IO a) -> Law m -> Property Source #

Given a way to evaluate an m a into a base Monad, turn a Law into a Property.