- Recap of QuickCheck - Context of the paper - Trying it out - Techniques used in QuickerCheck - Evaluation - Related work - Conclusion and Future - Questions

Recap of QuickCheck

Use to check your program. You can specify conditions your program should comply to and QuickQheck will generate a test that checks if the condition holds. For example a condition of reverse is: reverse (reverse xs) == xs. Unfortunately this condition on its own this is not enough, because const will also comply.

Context of the paper

The idea of QuickerCheck is that it uses multiple cores.

Trying it out

We see that the total time (so across threads) the time is much longer. But in real time there there is a performance increase. There are some conditions for using QuickerCheck: make sure the code is thread-safe.

Techniques used in QuickerCheck

It has has hard to make, because QuickCheck does not lend itself to parallelism. Test shrinking happens when there is a failing test, it makes the test smaller such that it does not fail. It is better than. If one of the treads finishes, because the test case is not valid. It has to report this to main thread to let it know to the user and terminate all other threads. Test shrinking means finding a failure and reducing it to the smallest failure, so it is easier for the user to read. Imagine there is a big input that fails, then smaller parts of the input are tested for failure.

Evaluation

How do we know it is faster? They did this with benchmarks. The saw that the number of speedup goes up with more cores.

Related work

For other languages there are also check libraries. fsCheck for .Net code also has parallelism and uses strides. tasty for Haskell has parallelism support, but only inside

Conclusion and future

It is mainly beneficial for slow properties, but shrinking not always. In the future they want to use faster algorithms.

Questions

What if a property is already parallel?: It will probably be problematic