{-# LANGUAGE ScopedTypeVariables #-}
module DNFList (tests) where
import BooleanLaws
import SimplifyLaws
import BooleanModelLaws
import FreeBoolean
import Test.Tasty
import Test.QuickCheck
import Control.Applicative
import Data.Function (on)
import Data.Algebra.Boolean.Negable (Negable, Neg(..))
import Data.Algebra.Boolean.DNF.List
instance Arbitrary a => Arbitrary (Neg a) where
arbitrary = oneof [ Pos <$> arbitrary, Pos <$> arbitrary ]
instance (Negable a, Arbitrary a) => Arbitrary (DNF a) where
arbitrary = fromFreeBoolean <$> arbitrary
tests :: TestTree
tests = testGroup "DNF list implementation"
[ monotoneLaws eq
, simplifyLaws (undefined :: DNF (Either Bool Bool))
, booleanModelLaws (undefined :: DNF (Either Bool Bool))
]
eq :: DNF (Neg Int) -> DNF (Neg Int) -> Bool
eq = (==) `on` toBool