Haskell Language Controllo di tutte le proprietà in un file


Esempio

quickCheckAll è un helper Template Haskell che trova tutte le definizioni nel file corrente il cui nome inizia con prop_ e le prop_ .

{-# LANGUAGE TemplateHaskell #-}

import Test.QuickCheck (quickCheckAll)
import Data.List (sort)

idempotent :: Eq a => (a -> a) -> a -> Bool
idempotent f x = f (f x) == f x

prop_sortIdempotent = idempotent sort

-- does not begin with prop_, will not be picked up by the test runner
sortDoesNotChangeLength xs = length (sort xs) == length xs


return []
main = $quickCheckAll

Si noti che è richiesta la riga return [] . Rende le definizioni testuali sopra quella linea visibili a Template Haskell.

$ runhaskell QuickCheckAllExample.hs
=== prop_sortIdempotent from tree.hs:7 ===
+++ OK, passed 100 tests.