apply-merge-0.1.0.0: bench/Main.hs
-- SPDX-FileCopyrightText: Copyright Preetham Gujjula
-- SPDX-License-Identifier: BSD-3-Clause
module Main (main) where
import Bench.Data.DoublyLinkedList.STRef qualified
import Bench.PriorityQueue.MinPQueue qualified
import Bench.PriorityQueue.MinPQueue.Mutable qualified
import Data.Function ((&))
import Data.List.ApplyMerge.DoublyLinkedList qualified
import Data.List.ApplyMerge.IntMap qualified
import Data.List.ApplyMerge.IntSet qualified
import Test.Tasty.Bench (Benchmark, bench, bgroup, defaultMain, nf)
main :: IO ()
main =
defaultMain
[ benchCommon
"DoublyLinkedList"
Data.List.ApplyMerge.DoublyLinkedList.applyMerge,
benchCommon "IntMap" Data.List.ApplyMerge.IntMap.applyMerge,
benchCommon "IntSet" Data.List.ApplyMerge.IntSet.applyMerge,
Bench.Data.DoublyLinkedList.STRef.benchmarks,
Bench.PriorityQueue.MinPQueue.benchmarks,
Bench.PriorityQueue.MinPQueue.Mutable.benchmarks
]
benchCommon ::
String ->
(forall a b c. (Ord c) => (a -> b -> c) -> [a] -> [b] -> [c]) ->
Benchmark
benchCommon name applyMerge =
bgroup name [benchmarkSymmetric]
where
benchmarkSymmetric :: Benchmark
benchmarkSymmetric =
bgroup "benchmarkSymmetric" (fmap mkBench [1 .. (6 :: Int)])
where
mkBench :: Int -> Benchmark
mkBench i = bench (show i) (nf collapse (10 ^ i))
where
collapse :: Int -> Int
collapse n =
let start = (n `quot` maxBound) + 1
in applyMerge (*) [start ..] [start ..]
& take n
& sum