psqueues-0.1.0.0: benchmarks/Main.hs
{-# LANGUAGE BangPatterns #-}
module Main where
import Criterion.Main
import System.Random
import BenchmarkTypes
import qualified Data.OrdPSQ.Benchmark as OrdPSQ
import qualified Data.IntPSQ.Benchmark as IntPSQ
import qualified Data.HashPSQ.Benchmark as HashPSQ
import qualified Data.PSQueue.Benchmark as PSQueue
import qualified Data.FingerTree.PSQueue.Benchmark as FingerPSQ
benchmarkSize :: Int
benchmarkSize = 2 ^ (12 :: Int)
{-# NOINLINE increasing #-}
increasing :: [BElem]
increasing = [(n, n, ()) | n <- [1 .. benchmarkSize]]
{-# NOINLINE decreasing #-}
decreasing :: [BElem]
decreasing = reverse increasing
{-# NOINLINE semirandom #-}
semirandom :: [BElem]
semirandom =
[ (x, y, ())
| (_, x, y) <- zip3 [1 .. benchmarkSize] (randoms gen1) (randoms gen2)
]
where
gen1 = mkStdGen 1234
gen2 = mkStdGen 5678
main :: IO ()
main = defaultMain $ runBenchmark
[ IntPSQ.benchmark "IntPSQ increasing" increasing
, IntPSQ.benchmark "IntPSQ decreasing" decreasing
, IntPSQ.benchmark "IntPSQ semirandom" semirandom
, HashPSQ.benchmark "HashPSQ increasing" increasing
, HashPSQ.benchmark "HashPSQ decreasing" decreasing
, HashPSQ.benchmark "HashPSQ semirandom" semirandom
, OrdPSQ.benchmark "OrdPSQ increasing" increasing
, OrdPSQ.benchmark "OrdPSQ decreasing" decreasing
, OrdPSQ.benchmark "OrdPSQ semirandom" semirandom
, PSQueue.benchmark "PSQueue increasing" increasing
, PSQueue.benchmark "PSQueue decreasing" decreasing
, PSQueue.benchmark "PSQueue semirandom" semirandom
, FingerPSQ.benchmark "FingerTree PSQueue increasing" increasing
, FingerPSQ.benchmark "FingerTree PSQueue decreasing" decreasing
, FingerPSQ.benchmark "FingerTree PSQueue semirandom" semirandom
]