The quickcheck-property-comb package

[Tags: library, public-domain]

These are simple monads that aim to reduce the pain of composing invariants/properties, and the documenting of those invariants for determining the cause of failure. Specifically, they provide a tool for effective diagnostic for invariants with changing post-conditions, leading to a faster cause-of-failure diagnosis.

Example case for invariants on a data structure Consumers:

 data (Ord l) => Consumers l =
   Consumers
     introduced :: S.Set l,
     met :: M.Map (S.Set l) Bool,
     disjoints :: Disjoints l


 disjoints_odds ::  Inv (Disjoints l)
 disjoints_odds = do
  doc "no odd sets in disjoints"
  disjoint_sets <- cause
  ..
  return False

 disjoints_non_singletons :: Inv (Disjoints l)
 disjoints_non_singletons = do
   ..
   return True

 disjoints_inv :: Invariants (Disjoints l)
 disjoints_inv= do
   sat disjoints_odds
   sat disjoints_non_singletons

 introduced_in_disjoint :: Inv (Consumers l)
 introduced_in_disjoint = do
   doc "all at quantity are a singleton subset in disjoints"
   subsets       <- (map S.singleton) . S.toList . introduced <$> cause
   disjoint_sets <- disjoints <$> cause
   return . and . map ((flip S.member) disjoint_sets) $ subsets

 inv_consumers :: Invariants (Consumers l)
 inv_consumers = do
   satcomp disjoints disjoints_inv
   satcomp met met_inv
   sat introduced_in_disjoint

And to run the invariants on generated cases:

 prop_testedFunction :: Arg -> Property
 prop_testedFunction arg =
  let consumers = testedFunction arg in
    runInvariants consumers inv_consumers

Properties

Versions0.1.0.0, 0.1.0.1, 0.1.0.2
Dependenciesbase (==4.5.*), mtl (==2.1.*), QuickCheck (>=2.5 && <=2.6)
LicensePublicDomain
AuthorJohn Feltz
Maintainerjfeltz@gmail.com
CategoryTesting
Home pagehttp://www.github.com/jfeltz/quickcheck-property-comb
Upload dateThu Dec 26 15:41:51 UTC 2013
Uploaded byjfeltz
Downloads240 total (25 in last 30 days)

Modules

Downloads

Maintainers' corner

For package maintainers and hackage trustees