Popularity
2.8
Stable
Activity
6.5
Stable
1
4
0

Monthly Downloads: 11
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Testing     Leancheck    
Latest version: v0.0.4
Add another 'leancheck' Package

README

LeanCheck

leancheck-instances's Build Status leancheck-instances on Hackage leancheck-instances on Stackage LTS leancheck-instances on Stackage Nightly

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 Maps:

> 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.

  1. 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.

  2. 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 in
  `leancheck-instances.cabal`.

* You may need to add a package dependency to `build-depends` on
  `leancheck-instances.cabal`.

* (Optionally) run `make depend` to update the `mk/depend.mk` file.
  1. 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.

  2. Create tests Go into tests/main.hs and add two properties exercising your type, one that holds and one that fails. Make sure the tests pass by running cabal test.

  3. (Optional) Add diff-tests

* on `bench/tiers.hs` add an entry for your type;
* add two matching entries on the `diff-test-tiers` and
  `update-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.
  1. 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


*Note that all licence references and agreements mentioned in the leancheck-instances README section above are relevant to that project's source code only.