1{-# LANGUAGE BangPatterns #-} 2module Main where 3 4import Criterion.Main 5import System.Random 6 7import BenchmarkTypes 8 9import qualified Data.OrdPSQ.Benchmark as OrdPSQ 10import qualified Data.IntPSQ.Benchmark as IntPSQ 11import qualified Data.HashPSQ.Benchmark as HashPSQ 12import qualified Data.PSQueue.Benchmark as PSQueue 13import qualified Data.FingerTree.PSQueue.Benchmark as FingerPSQ 14 15benchmarkSize :: Int 16benchmarkSize = 2 ^ (12 :: Int) 17 18{-# NOINLINE increasing #-} 19increasing :: [BElem] 20increasing = [(n, n, ()) | n <- [1 .. benchmarkSize]] 21 22{-# NOINLINE decreasing #-} 23decreasing :: [BElem] 24decreasing = reverse increasing 25 26{-# NOINLINE semirandom #-} 27semirandom :: [BElem] 28semirandom = 29 [ (x, y, ()) 30 | (_, x, y) <- zip3 [1 .. benchmarkSize] (randoms gen1) (randoms gen2) 31 ] 32 where 33 gen1 = mkStdGen 1234 34 gen2 = mkStdGen 5678 35 36main :: IO () 37main = defaultMain $ runBenchmark 38 [ IntPSQ.benchmark "IntPSQ increasing" increasing 39 , IntPSQ.benchmark "IntPSQ decreasing" decreasing 40 , IntPSQ.benchmark "IntPSQ semirandom" semirandom 41 , HashPSQ.benchmark "HashPSQ increasing" increasing 42 , HashPSQ.benchmark "HashPSQ decreasing" decreasing 43 , HashPSQ.benchmark "HashPSQ semirandom" semirandom 44 , OrdPSQ.benchmark "OrdPSQ increasing" increasing 45 , OrdPSQ.benchmark "OrdPSQ decreasing" decreasing 46 , OrdPSQ.benchmark "OrdPSQ semirandom" semirandom 47 , PSQueue.benchmark "PSQueue increasing" increasing 48 , PSQueue.benchmark "PSQueue decreasing" decreasing 49 , PSQueue.benchmark "PSQueue semirandom" semirandom 50 , FingerPSQ.benchmark "FingerTree PSQueue increasing" increasing 51 , FingerPSQ.benchmark "FingerTree PSQueue decreasing" decreasing 52 , FingerPSQ.benchmark "FingerTree PSQueue semirandom" semirandom 53 ] 54