packages feed

folds-common-0.2.0.0: test/M.hs

module Main where
import qualified Data.Fold.Common as C
import Data.List
import Test.Tasty
import Test.Tasty.QuickCheck

propAny :: TestTree
propAny = testProperty "Any Works"
          $ \l -> C.run l (C.any even) == any even (l :: [Int])

propAll :: TestTree
propAll = testProperty "All Works"
          $ \l -> C.run l (C.all even) == all even (l :: [Int])

propAnd :: TestTree
propAnd = testProperty "And Works"
          $ \l -> C.run l C.and == and (l :: [Bool])

propOr :: TestTree
propOr = testProperty "Or Works"
         $ \l -> C.run l C.or == or (l :: [Bool])

propElem :: TestTree
propElem = testProperty "Elem Works"
          $ \l i -> C.run l (C.elem i) == elem i (l :: [Int])

propNotElem :: TestTree
propNotElem = testProperty "NotElem Works"
          $ \l i -> C.run l (C.notElem i) == notElem i (l :: [Int])


propFind :: TestTree
propFind = testProperty "Find Works"
           $ \l -> C.run l (C.find even) == find even (l :: [Int])

propNull :: TestTree
propNull = testProperty "Null Works"
           $ \l -> C.run l C.null == null (l :: [Int])

propHead :: TestTree
propHead = testProperty "Head Works"
           $ \l -> C.run l C.head == mhead (l :: [Int])
  where mhead [] = Nothing
        mhead (x : xs) = Just x

propStrictify :: TestTree
propStrictify = testGroup "Strictify Works" [ s "any" $ C.any even
                                            , s "all" $ C.all even
                                            , s "find" $ C.find even]
  where s name f =
          testProperty name
          $ \l -> C.run (l :: [Int]) f == C.run l (C.strictify f)

main :: IO ()
main = defaultMain $ testGroup "Monoidal Folds" [ propAny
                                                , propAll
                                                , propAnd
                                                , propOr
                                                , propElem
                                                , propNotElem
                                                , propFind
                                                , propHead
                                                , propNull
                                                , propStrictify]