packages feed

grisette-0.13.0.1: test/Grisette/Lib/Control/Monad/Trans/ClassTests.hs

{-# LANGUAGE OverloadedStrings #-}

module Grisette.Lib.Control.Monad.Trans.ClassTests
  ( monadTransClassTests,
  )
where

import Control.Monad.Except (ExceptT)
import Grisette
  ( AsKey,
    AsKey1,
    ITEOp (symIte),
    SymBranching (mrgIfPropagatedStrategy),
    Union,
    mrgSingle,
  )
import Grisette.Lib.Control.Monad.Trans (mrgLift)
import Grisette.SymPrim (SymBool)
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit ((@?=))

monadTransClassTests :: Test
monadTransClassTests =
  testGroup
    "Class"
    [ testCase "mrgLift" $ do
        ( mrgLift
            ( mrgIfPropagatedStrategy "a" (return "b") (return "c") ::
                AsKey1 Union (AsKey SymBool)
            ) ::
            ExceptT (AsKey SymBool) (AsKey1 Union) (AsKey SymBool)
          )
          @?= mrgSingle (symIte "a" "b" "c")
    ]