Common LeanCheck instances.
Listable instances for types provided by the Haskell Platform.
The current objective is to include all types supported by quickcheck-instances: https://hackage.haskell.org/package/quickcheck-instances
LeanCheck
This package extends LeanCheck by providing Listable
instances for common types provided by the Haskell Platform.
This package is to LeanCheck what quickcheck-instances is to QuickCheck. The current objective is to include all types supported by quickcheck-instances.
Installing
To install the latest leancheck-instances version from Hackage, just run:
$ cabal update
$ cabal install leancheck-instances
Examples
Importing the library:
> import Test.LeanCheck
> import Test.LeanCheck.Instances
Checking properties of Text
:
> import qualified Data.Text as T
> check $ \t -> T.reverse (T.reverse t) == t
+++ OK, passed 200 tests.
> check $ \t -> T.reverse t == t
*** Failed! Falsifiable (after 6 tests):
"a "
Enumerating Map
s:
> import Data.Map
> list :: [Map Bool Bool]
[ fromList []
, fromList [(False,False)]
, fromList [(False,True)]
, fromList [(True,False)]
, fromList [(True,True)]
, fromList [(False,False),(True,False)]
, fromList [(False,False),(True,True)]
, fromList [(False,True),(True,False)]
, fromList [(False,True),(True,True)]
]
> take 7 $ list :: [Map Int Int]
[ fromList []
, fromList [(0,0)]
, fromList [(0,1)]
, fromList [(1,0)]
, fromList [(0,-1)]
, fromList [(1,1)]
, fromList [(0,0),(1,0)]
]
Adding more instances
Although the current objective is to include all types supported by quickcheck-instances, leancheck-instances only has about 10% of what is needed. Any help with new instances to increase that percentage will be appreciated.
This section provides a quick guide on how to add new instances.
Choose the type to support Compare the instances provided on quickcheck-instances and leancheck-instances and choose any that has not been added to leancheck-instances yet.
Create the module file if needed If needed, create a module that will contain your instance following the same structure in quickcheck-instances:
$ cat > src/Test/LeanCheck/Instances/Something.hs -- | -- Module : Test.LeanCheck.Instances.Containers -- Copyright : (c) 2019 Authors of leancheck-instances -- License : 3-Clause BSD (see the file LICENSE) -- Maintainer : Rudy Matela <[email protected]> -- -- 'Listable' something. module Test.LeanCheck.Instances.Something () where import Test.LeanCheck import Something ^D
Remember to:
Import your newly created module on
src/Test/LeanCheck/Instances.hs
Add your newly created module to the
exposed-modules
list inleancheck-instances.cabal
.You may need to add a package dependency to
build-depends
onleancheck-instances.cabal
.(Optionally) run
make depend
to update themk/depend.mk
file.
Create your instance Open the relevant module with your favourite text editor and add your instance:
instance ... => Listable Something where ...
Check the existing modules and the
Listable
typeclass documentation for how to create one.Make sure your instance builds with
cabal build
.Create tests Go into
tests/main.hs
and add two properties exercising your type, one thatholds
and one thatfails
. Make sure the tests pass by runningcabal test
.(Optional) Add diff-tests
- on
bench/tiers.hs
add an entry for your type; - add two matching entries on the
diff-test-tiers
andupdate-diff-test-tiers
Makefile targets. - run
make update-diff-test
to generate the reference output file. - run
make test
just to make sure the test is working.
- on
Submit a Pull Request Then submit a pull request on GitHub and wait for your build to pass. Alternatively, send a patch via e-mail.
Further reading / see also
- leancheck-instances' Haddock Documentation;
- LeanCheck;
- LeanCheck provider for Tasty --
$ cabal install tasty-leancheck
; - LeanCheck provider for test-framework --
$ cabal install test-framework-leancheck
; - LeanCheck provider for Hspec --
$ cabal install hspec-leancheck
.