Making our Own Luck: A Language for Random Generators
QuickCheck-style property-based random testing requires efficient generators for well-distributed random data satisfying complex logical predicates. Writing such generators by hand can be difficult and error prone.
We propose a domain-specific language, Luck, in which generators are expressed by decorating predicates with lightweight annotations controlling both the distribution of generated values and the amount of constraint solving that happens before each variable is instantiated. Generators in Luck are compact, readable, and maintainable, with efficiency close to custom handwritten generators.
We give a precise denotational semantics for Luck, reminiscent of those of probabilistic programming languages, and prove key theorems about its behavior, including the soundness and completeness of random generation with respect to a straightforward predicate semantics. We evaluate Luck on a collection of common examples from the random testing literature and on two significant case studies showing how Luck can be used for complex bug-finding tasks with comparable effectiveness and an order of magnitude reduction in testing code size, compared to handwritten generators.
Sat 23 Jan
|14:00 - 14:20|
Johannes BorgströmUppsala University, Ugo Dal LagoUniversity of Bologna, Andrew D. GordonMicrosoft Research and University of Edinburgh, Marcin SzymczakUniversity of EdinburghPre-print
|14:20 - 14:30|
|14:30 - 14:50|
Leonidas LampropoulosUniversity of Pennsylvania, Benjamin C. PierceUniversity of Pennsylvania, Cătălin HriţcuINRIA Paris, John HughesChalmers University of Technology, Zoe ParaskevopoulouPrinceton University, Li-yao XiaENS ParisPre-print
|14:50 - 15:00|
|15:00 - 15:20|
Sam StatonUniversity of Oxford, Hongseok YangUniversity of Oxford, UK, Chris HeunenUniversity of Edinburgh, Ohad KammarUniversity of Cambridge, Frank WoodUniversity of OxfordPre-print
|15:20 - 15:30|