mwc-random-0.8.0.5: benchmarks/Benchmark.hs
import Control.Exception
import Control.Monad.ST
import Criterion.Main
import Data.Int
import Data.Word
import qualified System.Random as R
import System.Random.MWC
import qualified System.Random.Mersenne as M
main = do
mwc <- create
mtg <- M.newMTGen . Just =<< uniform mwc
defaultMain
[ bgroup "mwc"
[ bench "Double" (uniform mwc :: IO Double)
, bench "Int" (uniform mwc :: IO Int)
, bench "Int8" (uniform mwc :: IO Int8)
, bench "Int16" (uniform mwc :: IO Int16)
, bench "Int32" (uniform mwc :: IO Int32)
, bench "Int64" (uniform mwc :: IO Int64)
, bench "Word" (uniform mwc :: IO Word)
, bench "Word8" (uniform mwc :: IO Word8)
, bench "Word16" (uniform mwc :: IO Word16)
, bench "Word32" (uniform mwc :: IO Word32)
, bench "Word64" (uniform mwc :: IO Word64)
, bench "Integer" (uniform mwc :: IO Word64)
, bench "normal" (normal mwc :: IO Double)
]
, bgroup "random"
[
bench "Double" (R.randomIO >>= evaluate :: IO Double)
, bench "Int" (R.randomIO >>= evaluate :: IO Int)
]
, bgroup "mersenne"
[
bench "Double" (M.random mtg :: IO Double)
, bench "Int" (M.random mtg :: IO Int)
]
]