We introduce StrictCheck: a property-based random testing framework for observing, specifying, and testing the strictness behaviors of Haskell functions. Strictness behavior is traditionally considered a non-functional property; StrictCheck allows it to be tested as if it were one, by reifying demands on data structures so they can be manipulated and examined within Haskell.
Testing strictness requires us to 1) efficiently observe the evaluation of data structures, 2) precisely specify strictness behaviors, and 3) correctly generate functions with random strictness. We tackle all three of these challenges, deriving an efficient, expressive, and generic framework for precise dynamic strictness testing. StrictCheck can specify and test the strictness behavior of any Haskell function—including higher-order ones—with only a constant factor of overhead, and requires no boilerplate for testing functions on Haskell-standard algebraic data types.
We demonstrate a non-trivial application of our library, developing a correct specification of a data structure whose properties intrinsically rely on subtle use of laziness: Okasaki’s constant-time purely functional queue.
Mon 24 Sep
|10:30 - 10:52|
|10:52 - 11:15|
Kenneth Foner, Hengchu ZhangUniversity of Pennsylvania, Leonidas LampropoulosUniversity of PennsylvaniaDOI
|11:15 - 11:37|
|11:37 - 12:00|
Chandrakana NandiUniversity of Washington, USA, James R. WilcoxUniversity of Washington, Taylor BlauUniversity of Washington, Dan GrossmanUniversity of Washington, Zachary TatlockUniversity of WashingtonDOI