{-# LANGUAGE TemplateHaskell, StandaloneDeriving, DeriveGeneric #-}
module Generic where
import Data.Derive.TopDown.IsInstance
import GHC.Generics
import Language.Haskell.TH.Syntax
import Test.HUnit
import Types
import Utils
genericCompany = TestCase
(assertEqual "Company is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [(ConT ''Company)]))
)
genericE0 = TestCase
(assertEqual "E0 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [(ConT ''E0)]))
)
genericI = TestCase
(assertEqual
"I is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''I, VarT (mkName "b")]]))
)
genericB = TestCase
(assertEqual
"B is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''B, VarT (mkName "a"), VarT (mkName "b")]]))
)
genericT = TestCase
(assertEqual
"T is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''T, VarT (mkName "a"), VarT (mkName "b"), VarT (mkName "c")]]))
)
genericT1 = TestCase
(assertEqual "T1 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [(ConT ''T1)]))
)
genericT2 = TestCase
(assertEqual
"T2 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''T2, VarT (mkName "a"), VarT (mkName "b")]]))
)
genericT3 = TestCase
(assertEqual
"T3 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''T3, VarT (mkName "k"), VarT (mkName "a"), VarT (mkName "b")]]))
)
genericR0 = TestCase
(assertEqual
"R0 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''R0, VarT (mkName "a")]]))
)
genericR1 = TestCase
(assertEqual
"R1 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''R1, VarT (mkName "a")]]))
)
genericR2 = TestCase
(assertEqual
"R2 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''R2, VarT (mkName "a")]]))
)
genericR6 = TestCase
(assertEqual
"R6 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''R6, VarT (mkName "a")]]))
)
generic1R0 = TestCase
(assertEqual "R0 is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''R0]]))
)
generic1R1 = TestCase
(assertEqual "R1 is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''R1]]))
)
generic1R6 = TestCase
(assertEqual "R6 is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''R6]]))
)
generic1Rx0 = TestCase
(assertEqual
"Rx0 is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''Rx0, VarT (mkName "a"), VarT (mkName "b")]]))
)
genericRx1 = TestCase
(assertEqual
"Rx1 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''Rx1, VarT (mkName "a"), VarT (mkName "b"), VarT (mkName "c")]]))
)
genericRx2 = TestCase
(assertEqual
"Rx2 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''Rx2, VarT (mkName "a"), VarT (mkName "b")]]))
)
genericColonEqColon = TestCase
(assertEqual
"(:=:) is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''(:=:), VarT (mkName "a"), VarT (mkName "b")]]))
)
generic1ColonEqColon = TestCase
(assertEqual
"(:=:) is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''(:=:), VarT (mkName "a") ]]))
)
genericP1 = TestCase
(assertEqual
"P1 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''P1, VarT (mkName "a")]]))
)
genericT6 = TestCase
(assertEqual
"T6 is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''P1, VarT (mkName "a")]]))
)
genericList = TestCase
(assertEqual
"List is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''List, VarT (mkName "a")]]))
)
generic1List = TestCase
(assertEqual "List is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''List]]))
)
genericStream = TestCase
(assertEqual
"Stream is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''Stream, VarT (mkName "k"), VarT (mkName "a"), VarT (mkName "b"), VarT (mkName "c")]]))
)
genericP = TestCase
(assertEqual
"P is instance of Generic"
True
$((qBoolToExp $ isInstance' ''Generic [apps [ConT ''P, VarT (mkName "a"), VarT (mkName "b")]]))
)
generic1P = TestCase
(assertEqual
"P is instance of Generic1"
True
$((qBoolToExp $ isInstance' ''Generic1 [apps [ConT ''P, VarT (mkName "a")]]))
)
functorP = TestCase
(assertEqual
"P is instance of Functor"
True
$((qBoolToExp $ isInstance' ''Functor [apps [ConT ''P, VarT (mkName "a")]]))
)
functorE = TestCase
(assertEqual
"E is instance of Functor"
True
$((qBoolToExp $ isInstance' ''Functor [apps [ConT ''E, VarT (mkName "a")]]))
)
functorPx = TestCase
(assertEqual "Px is instance of Functor"
True
$((qBoolToExp $ isInstance' ''Functor [apps [ConT ''Px]]))
)