-
Add Stack resolver lts-15 and drop lts-11;
-
High-level interface to the state machine API (PR #355) -- this captures the patterns described in http://www.well-typed.com/blog/2019/01/qsm-in-depth/ as a proper Haskell abstraction;
-
Experimental support for Markov chain-base command generation and reliability calculations;
-
forAllParallelCommands now gets another argument with type Maybe Int, indicating the minimum number of commands we want a test case to have.
Nothing
provides old functionality; -
Fixed a bug in the parallel case for the mock function (PR #348) and other bugs related to references in the parallel case;
-
Add a new field in the StateMachine called cleanup. This function can be used to ensure resources are cleaned between tests.
noCleanup
can be used to achieve the older functionality; -
Improved labelling;
-
Generalize parallelism, so that more than two threads can be used (PR #324);
-
Option to print dot visualisation of failed examples;
-
Handle exceptions better and provide better output.
This is a breaking release. See mentioned PRs for how to upgrade your code, and feel free to open an issue if anything isn't clear.
-
Generalise shrinking so that it might depend on the model (PR #263);
-
Drop support for GHC 8.0.* or older, by requiring base >= 4.10 (PR #267). If you need support for older GHC versions, open a ticket;
-
Use Stack resolver lts-13 as default (PR #261);
-
Generalise the
GConName
type class to make it possible to use it for commands that cannot haveGeneric1
instances. Also rename the type class toCommandNames
(PR #259).
The first and third item in the below list might break things, have a look at the diffs of the PRs on how to fix your code (feel free to open an issue if it isn't clear).
- Allow the user to explicitly stop the generation of commands (PR #256);
- Fix shrinking bug (PR #255);
- Replace MonadBaseControl IO with MonadUnliftIO (PR #252);
- Check if the pre-condition holds before executing an action (PR #251).
- Support QuickCheck-2.12.*;
- Use new compact diffing of records from tree-diff library when displaying counterexamples;
- Explain mock better in the README;
- Handle exceptions more gracefully;
- Show, possibly multiple, counterexample when parallel property fails.
- Fix bug that made tests fail on systems without docker;
- Remove some unused dependencies found by the weeder tool.
-
Minor fixes release:
- Fix broken link and code in README;
- Disable web server tests when docker isn't available (issue #222).
-
Major rewrite, addressing many issues:
-
The output of sequential runs now shows a diff of how the model changed in each step (related to issue #77);
-
The datatype of actions was renamed to commands and no longer is a GADT (discussed in issue #170, also makes issue #196 obsolete);
-
Commands can now return multiple references (issue #197);
-
Global invariants can now more easily be expressed (issue #200);
-
Counterexamples are now printed when post-conditions fail (issue #172).
-
- Remove upper bounds for dependencies, to easier keep up with Stackage nightly.
-
A propositional logic module was added to help provide better counterexamples when pre- and post-conditions don't hold;
-
Generation of parallel programs was improved (base on a comment by Hans Svensson about how Erlang QuickCheck does it);
-
Support for semantics that might fail was added;
-
Pretty printing of counterexamples was improved.
-
Z-inspired definition of relations and associated operations were added to help defining concise and showable models;
-
Template Haskell derivation of
shrink
and type classes:Show
,Constructors
,HFunctor
,HFoldable
,HTraversable
; -
New and more flexible combinators for building sequential and parallel properties replaced the old clunky ones;
-
Circular buffer example was added;
-
Two examples of how to test CRUD web applications were added.
- The API was simplified, thanks to ideas stolen from Hedgehog.
- Initial release.