packages feed

derive-topdown-0.1.0.0: test/Generic.hs

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