pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/jonathanknowles/quickcheck-groups

gin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-b55097560d244c08.css" /> GitHub - jonathanknowles/quickcheck-groups: QuickCheck support for testing instances of classes defined in the groups library. · GitHub
Skip to content

jonathanknowles/quickcheck-groups

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

119 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

quickcheck-groups

Latest Release Development Branch

Overview

The quickcheck-groups library provides:

  • QuickCheck support for testing instances of type classes defined in the groups library.
  • Compatibility with the quickcheck-classes library.
  • Reusable properties for type class laws, in the form of Laws definitions.

Usage

In general, usage is identical to that of the quickcheck-classes library. If you're already familiar with quickcheck-classes, then using this library should be straightforward.

Testing laws for a single type class

To test that the laws of a particular class hold for a particular type, use the lawsCheck function with the Laws definition for the class you wish to test.

🌠 Example

To test that the Group laws hold for the Sum Integer type:

import Data.Monoid (Sum)
import Data.Proxy (Proxy (Proxy))
import Test.QuickCheck.Classes (lawsCheck)
import Test.QuickCheck.Classes.Group (groupLaws)

lawsCheck (groupLaws (Proxy :: Proxy (Sum Integer)))

If all tests pass, you should see output similar to:

Group: groupLaw_invert_mempty    +++ OK, passed 1 test.
Group: groupLaw_invert_invert    +++ OK, passed 100 tests.
Group: groupLaw_invert_mappend_1 +++ OK, passed 100 tests.
Group: groupLaw_invert_mappend_2 +++ OK, passed 100 tests.
Group: groupLaw_subtract_mempty  +++ OK, passed 100 tests.
Group: groupLaw_subtract_self    +++ OK, passed 100 tests.
Group: groupLaw_subtract_other   +++ OK, passed 100 tests.
Group: groupLaw_pow_zero         +++ OK, passed 100 tests.
Group: groupLaw_pow_nonNegative  +++ OK, passed 100 tests.
Group: groupLaw_pow_nonPositive  +++ OK, passed 100 tests.

Testing laws for multiple type classes

To test that the laws of multiple classes hold for a particular type, use the lawsCheckOne function with the Laws definitions for the classes you wish to test.

🌠 Example

To test that the Sum Integer type satisfies the laws of Abelian and all superclasses:

import Data.Monoid (Sum)
import Data.Proxy (Proxy (Proxy))
import Test.QuickCheck.Classes
import Test.QuickCheck.Classes.Group

lawsCheckOne (Proxy :: Proxy (Sum Integer))
    [ semigroupLaws
    , monoidLaws
    , groupLaws
    , abelianLaws
    ]

Subclasses and superclasses

Each of the Laws definitions provided by this library corresponds to exactly one type class, and includes just the laws for that class. Laws for subclasses and superclasses are not automatically included. Therefore, you'll need to explicitly test the laws of every single class you wish to cover.

Coverage checks

This library includes coverage checks to ensure that important cases are covered, and to reduce the probability of test passes that are false positives. These coverage checks are performed automatically.

About

QuickCheck support for testing instances of classes defined in the groups library.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy