packages feed

fused-effects-mwc-random-0.1.0.0: bench/Bench.hs

{-# LANGUAGE PackageImports #-}

module Main (main) where

import Control.Monad
import Gauge

import qualified "fused-effects-mwc-random" Control.Carrier.Random.Lifted as MWC
import qualified "fused-effects-random" Control.Effect.Random as System

mwc :: Int -> IO [Double]
mwc n = MWC.runRandomSystem (replicateM n MWC.uniform)

system :: Int -> IO [Double]
system n = System.evalRandomIO (replicateM n System.getRandom)

main :: IO ()
main = defaultMain [ bench "System.Random (generate 1 double)" (nfAppIO system 1)
                   , bench "MWC.Random (generate 1 double)" (nfAppIO mwc 1)
                   , bench "System.Random (generate 10 double)" (nfAppIO system 10)
                   , bench "MWC.Random (generate 10 double)" (nfAppIO mwc 10)
                   , bench "System.Random (generate 100 double)" (nfAppIO system 100)
                   , bench "MWC.Random (generate 100 double)" (nfAppIO mwc 100)
                   ]