- 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