packages feed

typerep-map-0.7.0.0: benchmark/Main.hs

{-# LANGUAGE CPP #-}

module Main
    ( main
    ) where

import Criterion.Main (bgroup, defaultMain)

import Spec (BenchSpec (..))

import qualified CacheMap
import qualified CMap
import qualified DMap
import qualified OptimalVector as OptVec


main :: IO ()
main = do
    let specs = [("CMap", CMap.spec)
                ,("CacheMap", CacheMap.spec)
                , ("DMap", DMap.spec)
                , ("OptVec", OptVec.spec)
                ]
    {- This code creates a benchmark group. Given a getter
    (that is test description) it gets a benchmark generation
    function from each module spec. Benchmark generation
    function takes a label and generate benchmarks. It's
    possible to introduce parameters passing in the same way.
    --}
    let mkGroup getBenchmark =
          [ mkBenchmark label
          | (label, spec) <- specs
            -- Here we use pure to force pattern matching in List
            -- then in case of pattern match failure `mzero` will
            -- be called, so benchmark will be ignored.
          , Just mkBenchmark <- pure $ getBenchmark spec
          ]
    defaultMain
        [ bgroup "lookup" $ mkGroup benchLookup
        , bgroup "insert"
            [ bgroup "10 elements to empty" $ mkGroup benchInsertSmall
            , bgroup "1 element to big map" $ mkGroup benchInsertBig
            ]
        , bgroup "update"
            [ bgroup "10 elements to empty" $ mkGroup benchUpdateSmall
            , bgroup "1 element to big map" $ mkGroup benchUpdateBig
            ]
        ]