packages feed

hdr-histogram-0.1.0.0: bench/Data/HdrHistogram/MutableBench.hs

{-# LANGUAGE DataKinds #-}
module Data.HdrHistogram.MutableBench (benchmarks) where

import           Control.Monad             (forM_)
import           Control.Monad.Primitive   (PrimMonad, PrimState)
import           Criterion.Main
import           Data.HdrHistogram.Config
import qualified Data.HdrHistogram.Mutable as MH

type Config' = Config 1 3600000000 3

insertRange :: PrimMonad m => Int -> MH.Histogram (PrimState m) Config' Int Int -> m (MH.Histogram (PrimState m) Config' Int Int)
insertRange r h = do
  forM_ [1..r] $ MH.record h
  return h

benchmarks :: [Benchmark]
benchmarks = [
  env MH.new $ \h ->
    bgroup "insert" [
       bench "1" $ nfIO (MH.record h 12000 >> return h),
       bench "10" $ nfIO (insertRange 10 h),
       bench "100" $ nfIO (insertRange 100 h),
       bench "1000" $ nfIO (insertRange 1000 h),
       bench "10000" $ nfIO (insertRange 10000 h)
      ]
  ]