packages feed

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)
      ]
    ]