{-# OPTIONS_GHC -fno-warn-tabs #-} {-# LANGUAGE TypeSynonymInstances #-} module Main where import Test.Hspec import Test.Hspec.QuickCheck import Test.QuickCheck import Test.QuickCheck.Variant type Natural = Integer instance Variant Natural where invalid = do n <- arbitrary if n<0 then return n else return ((-1)*(n+1)) valid = do n <- arbitrary if n>=0 then return n else return ((-1)*(n-1)) tupleProp = describe "Naturals" $ do describe "valid" $ context "order" $ do it "0 <= n" $ propertyValid $ \ n -> 0 <= (n::Natural) it "0 <= n+m" $ propertyValid $ \ n m -> 0 <= (n::Natural)+(m::Natural) it "0 <= n*m" $ propertyValid $ \ n m -> 0 <= (n::Natural)*(m::Natural) describe "invalid" $ context "order" $ do it "0 > n" $ propertyInvalid $ \ n -> (n::Natural) < 0 it "0 > n+m" $ propertyInvalid $ \ n m -> 0 > (n::Natural)+(m::Natural) it "0 < n*m" $ propertyInvalid $ \ n m -> 0 < (n::Natural)*(m::Natural) main::IO () main = hspec $ describe "Test test" tupleProp