ListT-0.1.2.0: Test/List.hs
{-# LANGUAGE TypeApplications #-}
module Test.List where
import Control.Applicative
import Control.Arrow
import Data.Function (on)
import Data.Functor.Identity
import qualified Data.List as L
import Numeric.Natural
import Test.SmallCheck
import Test.Tasty
import Test.Tasty.SmallCheck
import Control.Monad.Trans.List
tests :: TestTree
tests =
testGroup "List"
[testProperty "List = ListT Identity" $ changeDepth (min 4) $ \ (xs, ys) ->
liftA2 (,) xs ys == (runIdentity . toListM $ (liftA2 (,) `on` fromList @_ @_ @Int) xs ys),
testProperty "toListM" $ (==) <*> runIdentity . toListM . fromList @_ @_ @Int,
testProperty "toReverseListM" $
liftA2 (==) reverse $ runIdentity . toReverseListM . fromList @_ @_ @Int,
testProperty "splitAtM" $ (liftA2 . liftA2) (==) L.genericSplitAt $ \ n ->
runIdentity . splitAtM (n :: Natural) . fromList @_ @_ @Int >>>
id *** runIdentity . toListM]