{-# LANGUAGE TypeOperators #-}
module Data.Comp.Examples.Param where

import Examples.Param.Names as Names
import Examples.Param.Graph as Graph

import Data.Comp.Param

import Test.Framework
import Test.Framework.Providers.QuickCheck2
import Test.QuickCheck
import Test.Utils





--------------------------------------------------------------------------------
-- Test Suits
--------------------------------------------------------------------------------

tests = testGroup "Parametric Compositional Data Types" [
         testProperty "names" namesTest,
         testProperty "graph" graphTest
        ]


--------------------------------------------------------------------------------
-- Properties
--------------------------------------------------------------------------------

instance (EqD f, PEq p) => EqD (f :&: p) where
    eqD (v1 :&: p1) (v2 :&: p2) = do b1 <- peq p1 p2
                                     b2 <- eqD v1 v2
                                     return $ b1 && b2

namesTest = en == en' && ep == ep'
graphTest = g == g && n == 5 && f == [0,2,1,2]