Join Newsletter

Property Base Your State Machine (Combo Workshop)

YOW! Lambda Jam 2019 - 15 May

PREPARATION - A clone or copy of this repository and completion of the initial setup steps contained therein.

Types are great, but in most languages we use, they can't cover everything.
Testing tries to fill that gap. Property-based testing generates bizarre
examples and finds minimal reproductions that break your tests - a significant
improvement over writing test cases by hand. But what if you have a thorny
stateful system to test?

State Machine Testing extends property-based testing to randomly test stateful
systems. The actions performed against the system are modeled as commands, and
the usual property-based test machinery, generates test cases, and shrinks
failing tests to their minimal counter-examples.

In this workshop we will build on the earlier talk and begin building up a state-machine test suite for a small imperative system.

Sean Chalmers

Functional Programming Engineer

Data61 / CSIRO

Likes riding motorcycles, crossfit, software that works, and writing documentation. Hates not having errors as values, not being able to use lenses, and writing bios. Also a closet game developer w...

Jack Kelly

Functional Programming Software Engineer

Queensland FP Lab, Data61

Jack is a Haskell enthusiast, lapsed tall-ship sailor and recent addition to the Queensland FP Lab. He has tutored functional programming at universities and for industrial programmers, and loves s...

Workshop Details

Target Audience
People wanting a hands-on introduction to using property-based state-machine testing
1 hour 30min

Learning Outcomes

  • Gain a basic understanding of property-based state-machine testing
  • Have implemented several state-machine tests using the Haskell `hedgehog` testing library
  • Understand its importance as an extremely powerful testing tool
  • Be excited enough that they want to apply it to their own projects
  • Gain awareness that:
    • Haskell isn't the only language that has this capability
    • Even in Haskell, `hedgehog` isn't the only library that can do this


  • Intermediate Haskell knowledge is required.
  • Knowledge of property-based (but not state-machine) testing would be beneficial
  • A clone or copy of this repository and completion of the initial setup steps contained therein.