packages feed

folds-common-0.2.0.0: test/L'.hs

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

propSum :: TestTree
propSum = testProperty "Sum Works"
          $ \l -> C.run l C.sum == (sum l :: Int)

propProduct :: TestTree
propProduct = testProperty "Product Works"
              $ \l -> C.run l C.product == (product l :: Int)

propCount :: TestTree
propCount = testProperty "Count Works"
            $ \l -> C.run l C.count == length (l :: [Int])

propMconcat :: TestTree
propMconcat = testProperty "Mconcat Works"
              $ \l -> C.run (map Sum l) C.mconcat
                      == mconcat (map Sum l :: [Sum Int])

propMinimum :: TestTree
propMinimum = testProperty "Minimum Works"
          $ \l -> C.run l C.minimum == mminimum (l :: [Int])
  where mminimum [] = Nothing
        mminimum xs = Just (minimum xs)

propMaximum :: TestTree
propMaximum = testProperty "Maximum Works"
          $ \l -> C.run l C.maximum == mmaximum (l :: [Int])
  where mmaximum [] = Nothing
        mmaximum xs = Just (maximum xs)

propNub :: TestTree
propNub = testProperty "Nub Works"
          $ \l -> C.run l C.nub == nub (l :: [Int])

propSlowNub :: TestTree
propSlowNub = testProperty "SlowNub Works"
          $ \l -> C.run l C.slowNub == nub (l :: [Int])

propIntoSet :: TestTree
propIntoSet = testProperty "IntoSet Works"
          $ \l -> C.run l C.intoSet == S.fromList (l :: [Int])


propLast :: TestTree
propLast = testProperty "Last works"
           $ \l -> C.run l C.last == (mlast l :: Maybe Int)
  where mlast [] = Nothing
        mlast xs = Just (last xs)

propNth :: TestTree
propNth = testProperty "Nth works"
           $ \i l -> C.run l (C.nth i) == (nth i l :: Maybe Int)
  where nth n xs | length xs <= n || n < 0 = Nothing
        nth n xs = Just (xs !! n)

main :: IO ()
main = defaultMain $ testGroup "Left Folds" [ propSum
                                            , propProduct
                                            , propCount
                                            , propMconcat
                                            , propMinimum
                                            , propMaximum
                                            , propNub
                                            , propSlowNub
                                            , propIntoSet
                                            , propLast
                                            , propNth]