packages feed

tidal-core-1.10.0: test/Sound/Tidal/ExceptionsTest.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}

module Sound.Tidal.ExceptionsTest where

import Control.DeepSeq
import Control.Exception
import Data.Typeable ()
import Sound.Tidal.Pattern
import Test.Hspec
import Prelude hiding ((*>), (<*))

run :: Spec
run =
  describe "NFData, forcing and catching exceptions" $ do
    describe "instance NFData (Pattern a)" $ do
      it "rnf forces argument" $ do
        evaluate (rnf (Pattern undefined Nothing Nothing :: Pattern ()))
          `shouldThrow` anyException


anyErrorCall :: Selector ErrorCall
anyErrorCall = const True

errorCall :: String -> Selector ErrorCall
#if MIN_VERSION_base(4,9,0)
errorCall s (ErrorCallWithLocation msg _) = s == msg
#else
errorCall s (ErrorCall msg)               = s == msg
#endif

anyIOException :: Selector IOException
anyIOException = const True

anyArithException :: Selector ArithException
anyArithException = const True