packages feed

cmf-0.1: test/Main.hs

{-# language TemplateHaskell #-}

module Main (main) where

import Control.Applicative (liftA2)
import Control.Monad.IO.Class (MonadIO(..))
import Data.Monoid (Sum(..))

import qualified Cmf
import qualified Data.Map as Map

import Hedgehog
import qualified Hedgehog.Gen as Gen
import qualified Hedgehog.Range as Range

import Prelude
import qualified Prelude

main :: IO Bool
main = checkParallel $$(discover)

prop_foldMapWithKey :: Property
prop_foldMapWithKey = property $ do
  let genKey = Gen.int Range.constantBounded
  let genVal = Gen.list (Range.linear 5 25) genKey
  m <- forAll $ Gen.map (Range.linear 50 200) ((,) <$> genKey <*> genVal)
  let f k v = pure $ Sum $ k * sum v
  lhs <- liftIO $ Map.foldMapWithKey f m
  rhs <- liftIO $ Cmf.foldMapWithKey f m
  lhs === rhs

prop_foldMap :: Property
prop_foldMap = property $ do
  let genKey = Gen.int Range.constantBounded
  let genVal = Gen.list (Range.linear 5 25) genKey
  l <- forAll $ Gen.list (Range.linear 50 200) ((,) <$> genKey <*> genVal)
  let f k v = pure $ Sum $ k * sum v
  lhs <- liftIO $ Prelude.foldMap (uncurry f) l
  rhs <- liftIO $ Cmf.foldMap (uncurry f) l
  lhs === rhs