{-# LANGUAGE TemplateHaskell #-} import Test.FitSpec import Test.LeanCheck.Tiers import Algebra.Graph instance (Listable a, Ord a) => Listable (Graph a) where tiers = nubT $ cons0 Empty \/ cons1 Vertex \/ cons2 Overlay \/ cons2 Connect deriveMutableE [''Ord] ''Graph instance Ord a => Ord (Graph a) where (<=) = isSubgraphOf type A = Int properties :: ( Graph A -> Graph A -> Graph A , Graph A -> Graph A -> Graph A ) -> [Property] properties (plus,times) = [ property $ \x y -> x + y == y + x , property $ \x y z -> x + (y + z) == (x + y) + z , property $ \x y z -> x * (y * z) == (x * y) * z , property $ \x y z -> x * (y * z) == (x * y) + (x * z) + (y * z) ] where (+) = plus (*) = times infixl 6 + infixl 7 * main :: IO () main = do args <- getArgsWith args { names = ["x + y", "x * y"] , nMutants = 1000 , nTests = 1000 , timeout = 0 } reportWithExtra [ ((*),(+)) , ((*),(*)) , ((+),(+)) ] args ((+),(*)) properties