packages feed

grisette-0.3.1.1: test/Grisette/Core/Control/Monad/UnionMTests.hs

{-# LANGUAGE OverloadedStrings #-}

module Grisette.Core.Control.Monad.UnionMTests (unionMTests) where

import Grisette.Core.Control.Monad.UnionM (UnionM, unionSize)
import Grisette.Core.Data.Class.GenSym (choose)
import Grisette.Core.Data.Class.SimpleMergeable
  ( UnionLike (single),
    mrgIf,
  )
import Grisette.Core.Data.Class.Solvable (Solvable (ssym))
import Test.Framework (Test, testGroup)
import Test.Framework.Providers.HUnit (testCase)
import Test.HUnit ((@=?))

unionMTests :: Test
unionMTests =
  testGroup
    "UnionMTests"
    [ testCase "unionSize" $ do
        unionSize (single 1 :: UnionM Integer) @=? 1
        unionSize (mrgIf (ssym "a") (single 1) (single 2) :: UnionM Integer) @=? 2
        unionSize (choose [1, 2, 3, 4, 5, 6, 7] "a" :: UnionM Integer) @=? 7
    ]