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