{-# OPTIONS_HADDOCK show-extensions #-}
-- |
-- Module : TestTH
-- Copyright : (c) 2015, Aleksey Kliger
-- License : BSD3 (See LICENSE)
-- Maintainer : Aleksey Kliger
-- Stability : experimental
--
-- Test of 'makeClosedAlpha' splice.
{-# LANGUAGE TemplateHaskell #-}
module TestTH (test_TH) where
import Data.Monoid(Monoid(..))
import Test.Tasty
import Test.Tasty.HUnit
import AlphaAssertions
import Unbound.Generics.LocallyNameless
import Unbound.Generics.LocallyNameless.Internal.Fold (toListOf)
import Unbound.Generics.LocallyNameless.TH
data K =
KT
| KArr K K
deriving (Eq, Ord, Show)
$(makeClosedAlpha ''K)
kt, kF, kG :: K
kt = KT
kF = KT `KArr` KT
kG = kF `KArr` KT
emptyPat :: [Name ()]
emptyPat = []
test_TH :: TestTree
test_TH = testGroup "TH makeClosedAlpha splice"
[ testCase "TH aeq" $ assertAeq kt kt
, testCase "TH acompare" $ assertAcompare kt kF (compare kt kF)
, testCase "TH fvAny kG" $ assertEqual "" (toListOf fvAny kG) []
, testCase "TH close" $ assertEqual "" (close initialCtx (namePatFind emptyPat) kt) kt
, testCase "TH open" $ assertEqual "" (open initialCtx (nthPatFind emptyPat) kG) kG
, testCase "TH isTerm" $ assertEqual "" (isTerm kF) mempty
, testCase "TH isPat"
$ assertBool "isNullDisjointSEt (isPat kF)" (isNullDisjointSet $ isPat kF)
]