QuickCheck: a lightweight tool for random testing of Haskell programs