Smallcheck and lazy smallcheck: automatic exhaustive testing for small values

This paper describes two Haskell libraries for property-based testing. Following the lead of QuickCheck, these testing libraries SmallCheck and Lazy SmallCheck also use type-based generators to obtain test-sets of finite values for which properties are checked, and report any counter-examples found. But instead of using a sample of randomly generated values they test properties for all values up to some limiting depth, progressively increasing this limit. The paper explains the design and implementation of both libraries and evaluates them in comparison with each other and with QuickCheck.

[1]  Simon L. Peyton Jones,et al.  A semantics for imprecise exceptions , 1999, PLDI '99.

[2]  John W. Lloyd,et al.  Programming in an Integrated Functional and Logic Language , 1999, J. Funct. Log. Program..

[3]  Richard S. Bird,et al.  Introduction to functional programming , 1988, Prentice Hall International series in computer science.

[4]  Koen Claessen,et al.  QuickCheck: a lightweight tool for random testing of Haskell programs , 2000, ICFP.

[5]  Fredrik Lindblad Property Directed Generation of First-Order Test Data , 2007, Trends in Functional Programming.

[6]  Koen Claessen,et al.  Testing and Tracing Lazy Functional Programs Using QuickCheck and Hat , 2002, Advanced Functional Programming.

[7]  Sebastian Fischer,et al.  EasyCheck - Test Data for Free , 2008, FLOPS.

[8]  Chris Okasaki,et al.  Red-black trees in a functional setting , 1999, Journal of Functional Programming.

[9]  M. Hanus,et al.  Curry: An Integrated Functional Logic Language , 2003 .

[10]  Colin Runciman,et al.  A static checker for safe pattern matching in Haskell , 2005, Trends in Functional Programming.

[11]  Graham Hutton,et al.  The countdown problem , 2002, Journal of Functional Programming.

[12]  Richard S. Bird,et al.  Introduction to functional programming using haskeu , 1998 .

[13]  Colin Runciman,et al.  The Reduceron: Widening the von Neumann Bottleneck for Graph Reduction Using an FPGA , 2008, IFL.

[14]  Simon Peyton Jones,et al.  The Implementation of Functional Programming Languages (Prentice-hall International Series in Computer Science) , 1987 .

[15]  Marinus J. Plasmeijer,et al.  Gast: Generic Automated Software Testing , 2002, IFL.

[16]  Daniel Jackson,et al.  Software Abstractions - Logic, Language, and Analysis , 2006 .

[17]  Colin Runciman,et al.  Haskell program coverage , 2007, Haskell '07.

[18]  Colin Runciman,et al.  Finding Inputs that Reach a Target Expression , 2007, Seventh IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2007).

[19]  Simon L. Peyton Jones,et al.  The Implementation of Functional Programming Languages , 1987 .

[20]  D. A. Turner,et al.  A new implementation technique for applicative languages , 1979, Softw. Pract. Exp..