packages feed

QuickCheckVariant-1.0.0.0: test/VariantTest.hs

{-# 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