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.
Nothingprovides 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.
noCleanupcan be used to achieve the older functionality;
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);
GConNametype class to make it possible to use it for commands that cannot have
Generic1instances. Also rename the type class to
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
shrinkand type classes:
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.