{-# LANGUAGE BangPatterns #-} -- module StraightUp where import Control.Monad.Random import qualified Data.Vector.Primitive as V import Data.RangeMin.Fusion (replicateM) import Criterion.Main import Criterion.Config import Data.RangeMin n :: Int n = 1000000 {-# NOINLINE performRM #-} performRM :: V.Vector Int -> Int performRM ys = unsafeIntRangeMin ys 0 1 bencher :: Int -> IO Benchmark bencher n = do !xs <- replicateM n getRandom V.foldr seq (return (bench (show n) (whnf performRM xs))) xs main :: IO () main = do benches <- mapM bencher [100,250, 500, 1000, 2500, 10000, 100000, 1000000] defaultMainWith defaultConfig{cfgPerformGC = ljust True} (return ()) benches