linear-base-0.8.1: bench/Data/Mutable/Quicksort.hs
{-# LANGUAGE NumericUnderscores #-}
module Data.Mutable.Quicksort (benchmarks) where
import Control.DeepSeq (force)
import Control.Exception (evaluate)
import Data.List (sort)
import Simple.Quicksort (quicksortUsingArray, quicksortUsingList)
import System.Random
import Test.Tasty.Bench
-- Follows thread from https://discourse.haskell.org/t/linear-haskell-quicksort-performance/10280
gen :: StdGen
gen = mkStdGen 4541645642
randomListBuilder :: Int -> IO [Int]
randomListBuilder size = evaluate $ force $ take size (randoms gen :: [Int])
sizes :: [Int]
sizes = [1_000, 50_000, 1_000_000]
benchmarks :: Benchmark
benchmarks =
bgroup
"quicksort"
( ( \size ->
env (randomListBuilder size) $ \randomList ->
bgroup
("size " ++ (show size))
[ bench "quicksortUsingArray" $
nf quicksortUsingArray randomList,
bench "quicksortUsingList" $
nf quicksortUsingList randomList,
bench "sortStdLib" $
nf sort randomList
]
)
<$> sizes
)