packages feed

streaming-benchmarks-0.4.1: lib/Benchmarks/Common.hs

-- |
-- Module      : Benchmarks.Common
-- Copyright   : (c) 2018 Harendra Kumar
--
-- License     : MIT
-- Maintainer  : harendra.kumar@gmail.com

module Benchmarks.Common
    ( value
    , maxValue
    , appendValue
    , benchIO
    , benchIOAction
    , benchIOArray
    , benchId
    , benchPure
    , benchPureFunc
    ) where

import Control.DeepSeq (NFData)
import Data.Functor.Identity (Identity, runIdentity)
import System.Random (randomRIO)

import Gauge

value, maxValue,appendValue :: Int
value = 1000000
maxValue = value + 1000
appendValue = 10000

{-# INLINE benchIOAction #-}
benchIOAction :: NFData b => String -> (Int -> IO b) -> Benchmark
benchIOAction name action = bench name $ nfIO $ randomRIO (1,1) >>= action

{-# INLINE benchIO #-}
benchIO :: (NFData b) => String -> (Int -> a) -> (a -> IO b) -> Benchmark
benchIO name src f = bench name $ nfIO $ randomRIO (1,1) >>= f . src

{-# INLINE benchId #-}
benchId :: (NFData b) => String -> (Int -> a) -> (a -> Identity b) -> Benchmark
benchId name src f = bench name $ nf (runIdentity . f) (src 10)

{-# INLINE benchPureFunc #-}
benchPureFunc :: NFData b => String -> (Int -> b) -> Benchmark
benchPureFunc name action =
    bench name $ nfIO $ randomRIO (1,1) >>= return . action

{-# INLINE benchPure #-}
benchPure :: (NFData b) => String -> (Int -> a) -> (a -> b) -> Benchmark
benchPure name src f =
    bench name $ nfIO $ randomRIO (1,1) >>= return . f . src

{-# INLINE benchIOArray #-}
benchIOArray :: NFData b => String -> (Int -> IO a) -> (a -> IO b) -> Benchmark
benchIOArray name src f =
    bench name $ nfIO $ randomRIO (1,1) >>= src >>= f