content: module Main (main) where
  
  import Test.Tasty (TestTree, testGroup, defaultMain)
  import Test.Tasty.QuickCheck (testProperty)
  
  import Control.Monad.Freer (run)
  
  import qualified Tests.Coroutine (tests)
  import qualified Tests.Exception (tests)
  import qualified Tests.Fresh (tests)
  import qualified Tests.NonDet (tests)
  import qualified Tests.Reader (tests)
  import qualified Tests.State (tests)
  import qualified Tests.Loop (tests)
  import qualified Tests.TH (tests)
  
  --------------------------------------------------------------------------------
                             -- Pure Tests --
  --------------------------------------------------------------------------------
  addInEff :: Int -> Int -> Int
  addInEff x y = run $ (+) <$> pure x <*> pure y
  
  pureTests :: TestTree
  pureTests = testGroup "Pure Eff tests"
    [ testProperty "Pure run just works: (+)"
        $ \x y -> addInEff x y == x + y
    ]
  
  --------------------------------------------------------------------------------
                               -- Runner --
  --------------------------------------------------------------------------------
  main :: IO ()
  main = defaultMain $ testGroup "Tests"
    [ pureTests
    , Tests.Coroutine.tests
    , Tests.Exception.tests
    , Tests.Fresh.tests
    , Tests.NonDet.tests
    , Tests.Reader.tests
    , Tests.State.tests
    , Tests.Loop.tests
    , Tests.TH.tests
    ]
  