on 73e7201 help sign in
52 lines 1.6 kB history raw
1{-# LANGUAGE CPP #-}
3module Main
4 ( main
5 ) where
7import Criterion.Main (bgroup, defaultMain)
9import Spec (BenchSpec (..))
11import qualified CacheMap
12import qualified CMap
13#if ( __GLASGOW_HASKELL__ >= 802 )
14import qualified DMap
15#endif
16import qualified OptimalVector as OptVec
19main :: IO ()
20main = do
21 let specs = [("CMap", CMap.spec)
22 ,("CacheMap", CacheMap.spec)
23#if ( __GLASGOW_HASKELL__ >= 802 )
24 , ("DMap", DMap.spec)
25#endif
26 , ("OptVec", OptVec.spec)
27 ]
28 {- This code creates a benchmark group. Given a getter
29 (that is test description) it gets a benchmark generation
30 function from each module spec. Benchmark generation
31 function takes a label and generate benchmarks. It's
32 possible to introduce parameters passing in the same way.
33 --}
34 let mkGroup getBenchmark =
35 [ mkBenchmark label
36 | (label, spec) <- specs
37 -- Here we use pure to force pattern matching in List
38 -- then in case of pattern match failure `mzero` will
39 -- be called, so benchmark will be ignored.
40 , Just mkBenchmark <- pure $ getBenchmark spec
41 ]
42 defaultMain
43 [ bgroup "lookup" $ mkGroup benchLookup
44 , bgroup "insert"
45 [ bgroup "10 elements to empty" $ mkGroup benchInsertSmall
46 , bgroup "1 element to big map" $ mkGroup benchInsertBig
47 ]
48 , bgroup "update"
49 [ bgroup "10 elements to empty" $ mkGroup benchUpdateSmall
50 , bgroup "1 element to big map" $ mkGroup benchUpdateBig
51 ]
52 ]