discrimination-0.4.1: benchmarks/examples.hs
module Main where
import Control.Exception (evaluate)
import Control.DeepSeq (rnf)
import Criterion.Main
import Criterion.Types
import qualified Data.List as L
import qualified System.Random.SplitMix as SM
import Utils
import Data.Discrimination (nub, sort)
main :: IO ()
main = do
let gen = SM.mkSMGen 0xc0de
let xs100 = finiteList gen 100
let xs1000 = finiteList gen 1000
let xs10000 = finiteList gen 10000
evaluate $ rnf xs100
evaluate $ rnf xs1000
evaluate $ rnf xs10000
defaultMainWith (defaultConfig { timeLimit = 1 })
[ bgroup "nub"
[ bgroup "List.nub"
[ bench "100" $ whnf (length . L.nub) xs100
, bench "1000" $ whnf (length . L.nub) xs1000
]
, bgroup "ordNub"
[ bench "100" $ whnf (length . ordNub) xs100
, bench "1000" $ whnf (length . ordNub) xs1000
, bench "10000" $ whnf (length . ordNub) xs10000
]
, bgroup "hashNub"
[ bench "100" $ whnf (length . hashNub) xs100
, bench "1000" $ whnf (length . hashNub) xs1000
, bench "10000" $ whnf (length . hashNub) xs10000
]
, bgroup "Discrimination.nub"
[ bench "100" $ whnf (length . nub) xs100
, bench "1000" $ whnf (length . nub) xs1000
, bench "10000" $ whnf (length . nub) xs10000
]
]
, bgroup "sort"
[ bgroup "List.sort"
[ bench "10000" $ whnf (length . L.sort) xs10000
]
, bgroup "mergesort"
[ bench "10000" $ whnf (length . mergesort) xs10000
]
, bgroup "introsort"
[ bench "10000" $ whnf (length . introsort) xs10000
]
, bgroup "Discrimination.sort"
[ bench "10000" $ whnf (length . sort) xs10000
]
]
]