grisette-0.8.0.0: test/Grisette/SymPrim/SymGeneralFunTests.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeOperators #-}
module Grisette.SymPrim.SymGeneralFunTests (symGeneralFunTests) where
import Grisette.Internal.Core.Data.Class.ExtractSym (ExtractSym (extractSymMaybe))
import Grisette.Internal.Core.Data.Class.Function (Function ((#)))
import Grisette.Internal.Core.Data.Class.ModelOps
( SymbolSetRep (buildSymbolSet),
)
import Grisette.Internal.SymPrim.GeneralFun (type (-->))
import Grisette.Internal.SymPrim.Prim.Internal.Term (TypedAnySymbol)
import Grisette.Internal.SymPrim.Prim.Model (AnySymbolSet, ConstantSymbolSet)
import Grisette.Internal.SymPrim.SymGeneralFun (type (-~>))
import Grisette.Internal.SymPrim.SymInteger (SymInteger)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit ((@?=))
symGeneralFunTests :: Test
symGeneralFunTests =
testGroup
"SymGeneralFun"
[ testCase "ExtractSym" $ do
let f :: SymInteger -~> SymInteger = "f"
let a :: SymInteger = "a"
let fa = f # a
let anySymbolSet =
buildSymbolSet
( "a" :: TypedAnySymbol Integer,
"f" :: TypedAnySymbol (Integer --> Integer)
) ::
AnySymbolSet
extractSymMaybe fa @?= Just anySymbolSet
extractSymMaybe fa @?= (Nothing :: Maybe ConstantSymbolSet)
]