-- | module Main where import Control.Monad import Control.Monad.ST (runST) import qualified Data.Vector.Unboxed as U import Criterion.Main import System.Random.MWC -- import Numeric.Sum import Data.Monoid.Statistics import Data.Monoid.Statistics.Extra sampleD10,sampleD100,sampleD1000 :: U.Vector Double sampleD10 = runST $ U.replicateM 10 . uniform =<< create sampleD100 = runST $ U.replicateM 100 . uniform =<< create sampleD1000 = runST $ U.replicateM 1000 . uniform =<< create sampleI10,sampleI100,sampleI1000 :: U.Vector Int sampleI10 = runST $ U.replicateM 10 . uniform =<< create sampleI100 = runST $ U.replicateM 100 . uniform =<< create sampleI1000 = runST $ U.replicateM 1000 . uniform =<< create main :: IO () main = defaultMain [ bgroup "Count" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> Count) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> Count) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> Count) sampleD1000 ] , bgroup "KBN" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> KBNSum) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> KBNSum) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> KBNSum) sampleD1000 ] , bgroup "Kahan" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> KahanSum) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> KahanSum) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> KahanSum) sampleD1000 ] , bgroup "MeanKBN" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> MeanKBN) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> MeanKBN) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> MeanKBN) sampleD1000 , bench "10 I" $ whnf (reduceSampleVec :: U.Vector Int -> MeanKBN) sampleI10 , bench "100 I" $ whnf (reduceSampleVec :: U.Vector Int -> MeanKBN) sampleI100 , bench "1000 I" $ whnf (reduceSampleVec :: U.Vector Int -> MeanKBN) sampleI1000 ] , bgroup "WelfordMean" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> WelfordMean) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> WelfordMean) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> WelfordMean) sampleD1000 , bench "10 I" $ whnf (reduceSampleVec :: U.Vector Int -> WelfordMean) sampleI10 , bench "100 I" $ whnf (reduceSampleVec :: U.Vector Int -> WelfordMean) sampleI100 , bench "1000 I" $ whnf (reduceSampleVec :: U.Vector Int -> WelfordMean) sampleI1000 ] , bgroup "Variance" [ bench "10 D" $ whnf (reduceSampleVec :: U.Vector Double -> Variance) sampleD10 , bench "100 D" $ whnf (reduceSampleVec :: U.Vector Double -> Variance) sampleD100 , bench "1000 D" $ whnf (reduceSampleVec :: U.Vector Double -> Variance) sampleD1000 , bench "10 I" $ whnf (reduceSampleVec :: U.Vector Int -> Variance) sampleI10 , bench "100 I" $ whnf (reduceSampleVec :: U.Vector Int -> Variance) sampleI100 , bench "1000 I" $ whnf (reduceSampleVec :: U.Vector Int -> Variance) sampleI1000 ] ]