quickcheck-classes
QuickCheck common typeclasses
https://github.com/andrewthad/quickcheck-classes#readme
Version on this page: | 0.4.13 |
LTS Haskell 22.43: | 0.6.5.0@rev:3 |
Stackage Nightly 2024-12-08: | 0.6.5.0@rev:3 |
Latest on Hackage: | 0.6.5.0@rev:3 |
quickcheck-classes-0.4.13@sha256:1c7645808741752772dae14d450c5020b28309dcfb8074f92342ef5ae9d90956,3403
Module documentation for 0.4.13
- Test
- Test.QuickCheck
quickcheck-classes
This library provides sets of properties that should hold for common typeclasses, along with three (3) simple functions that you can use to test them.
lawsCheck
:
A convenience function for testing properties in GHCi. For example, at GHCi:
>>> lawsCheck (monoidLaws (Proxy :: Proxy Ordering))
Monoid: Associative +++ OK, passed 100 tests.
Monoid: Left Identity +++ OK, passed 100 tests.
Monoid: Right Identity +++ OK, passed 100 tests.
Assuming that the Arbitrary
instance for Ordering
is good, we now
have confidence that the Monoid
instance for Ordering
satisfies
the monoid laws.
lawsCheckMany
:
A convenience function for checking multiple typeclass instances of multiple types. Consider the following Haskell source file:
import Data.Proxy (Proxy(..))
import Data.Map (Map)
import Data.Set (Set)
-- A 'Proxy' for 'Set' 'Int'.
setInt :: Proxy (Set Int)
setInt = Proxy
-- A 'Proxy' for 'Map' 'Int' 'Int'.
mapInt :: Proxy (Map Int Int)
mapInt = Proxy
myLaws :: Proxy a -> [Laws]
myLaws p = [eqLaws p, monoidLaws p]
namedTests :: [(String, [Laws])]
namedTests =
[ ("Set Int", myLaws setInt)
, ("Map Int Int", myLaws mapInt)
]
Now, in GHCi:
>>> lawsCheckMany namedTests
Testing properties for common typeclasses
-------------
-- Set Int --
-------------
Eq: Transitive +++ OK, passed 100 tests.
Eq: Symmetric +++ OK, passed 100 tests.
Eq: Reflexive +++ OK, passed 100 tests.
Monoid: Associative +++ OK, passed 100 tests.
Monoid: Left Identity +++ OK, passed 100 tests.
Monoid: Right Identity +++ OK, passed 100 tests.
Monoid: Concatenation +++ OK, passed 100 tests.
-----------------
-- Map Int Int --
-----------------
Eq: Transitive +++ OK, passed 100 tests.
Eq: Symmetric +++ OK, passed 100 tests.
Eq: Reflexive +++ OK, passed 100 tests.
Monoid: Associative +++ OK, passed 100 tests.
Monoid: Left Identity +++ OK, passed 100 tests.
Monoid: Right Identity +++ OK, passed 100 tests.
Monoid: Concatenation +++ OK, passed 100 tests.
specialisedLawsCheckMany
A convenience function that allows one to check many typeclass instances of the same type.
For example, in GHCi:
>>> specialisedLawsCheckMany (Proxy :: Proxy Word) [jsonLaws, showReadLaws]
ToJSON/FromJSON: Encoding Equals Value +++ OK, passed 100 tests.
ToJSON/FromJSON: Partial Isomorphism +++ OK, passed 100 tests.
Show/Read: Partial Isomorphism +++ OK, passed 100 tests.
Changes
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to the Haskell Package Versioning Policy.
[0.4.13] - 2018-07-18
Added
- Laws for
Enum
typeclass.
[0.4.12] - 2018-06-07
Added
- Remaining laws for
Storable
typeclass. - Laws for
Prim
typeclass requiringsetByteArray
andsetOffAddr
to match the behavior that would result from manually iterating over the array and writing the value element-by-element.
Change
- Correct the law from the
Bits
typeclass that relatesclearBit
andzeroBits
. - Limit the size of the lists that are used when testing that
mconcat
andsconcat
have behaviors that match their default implementations. For some data structures, concatenating the elements in a list of several dozen arbitrary values does not finish in a reasonable amount of time. So, the size of these has been limited to 6. - Make library build against
primitive-0.6.1.0
.
[0.4.11.1] - 2018-05-25
Change
- Fix compatibility with older GHCs when
semigroupoids
support is disabled.
[0.4.11] - 2018-05-24
Added
- Greatly improved documentation
specialisedLawsCheckMany
function, a shorter way for the user to uselawsCheckMany
on a single type.
Change
- Some internal names, making it more clear what it is that they do.
[0.4.10] - 2018-05-03
Added
- Property tests for
mconcat
,sconcat
, andstimes
. It isn’t common to override the defaults for these, but when you do, it’s nice to check that they agree with what they are supposed to do.
[0.4.9] - 2018-04-06
Change
- Be more careful with import of
Data.Primitive
. There is a branch ofprimitive
that addsPrimArray
. The implementation ofPrimArray
in this library should eventually be removed, but for now it will be sufficient to ensure that it does not create a conflicting import problem with the one in the branch.
[0.4.8] - 2018-03-29
Change
- Fix compilation regression for older versions of transformers.
[0.4.7] - 2018-03-29
Change
- Split up monolithic module into hidden internal modules.
- Fix compilation regression for older GHCs.
[0.4.6] - 2018-03-29
Added
- Property test the naturality law for
MonadZip
. There is another law that instances should satisfy (the Information Preservation law), but it’s more difficult to write a test for. It has been omitted for now. - Property tests for all
MonadPlus
laws. - Several additional property tests for list-like containers: mapMaybe, replicate, filter.
[0.4.5] - 2018-03-26
Added
- Property tests for list-like containers that have
IsList
instances. These are useful for things that are nearlyFoldable
or nearlyTraversable
but are either constrained in their element type or totally monomorphic in it.
[0.4.4] - 2018-03-23
Added
- Cabal flags for controlling whether or not
aeson
andsemigroupoids
are used. These are mostly provided to accelerate buildsprimitive
’s test suite.
[0.4.3] - 2018-03-23
Added
- Property tests for
foldl1
andfoldr1
. - Property tests for
Traversable
.
[0.4.2] - 2018-03-22
Changed
- Made compatible with
transformers-0.3
. Tests for higher-kinded typeclasses are unavailable when built with a sufficiently old version of bothtransformers
andbase
. This is becauseEq1
andShow1
are unavailable in this situation.
[0.4.1] - 2018-03-21
Changed
- Made compatible with
transformers-0.4
.
[0.4.0] - 2018-03-20
Added
- Property tests for
Bifunctor
andAlternative
.
Changed
- Made compatible with older GHCs all the way back to 7.8.4.
- Lower dependency footprint. Eliminate the dependency on
prim-array
and inline the relevant functions and types from it intoTest.QuickCheck.Classes
. None of these are exported.