@@ -0,0 +1,41 @@
1+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
2+{-# LANGUAGE StandaloneDeriving #-}
3+module Main
4+ ( main
5+ ) where
6+
7+-------------------------------------------------------------------------------
8+import Control.Applicative
9+import Control.DeepSeq
10+import Control.Monad
11+import Criterion.Main
12+import Data.RNG
13+import Database.Bloodhound.Types
14+import Numeric
15+-------------------------------------------------------------------------------
16+import Katip.Scribes.ElasticSearch
17+-------------------------------------------------------------------------------
18+
19+main :: IO ()
20+main = do
21+ rng <- mkRNG
22+ defaultMain [mkDocIdBenchmark rng]
23+
24+-------------------------------------------------------------------------------
25+mkDocIdBenchmark :: RNG -> Benchmark
26+mkDocIdBenchmark rng = bgroup "mkDocId"
27+ [ bench "mkDocId (randomIO)" $ nfIO mkDocId
28+ , bench "mkDocId' (shared )" $ nfIO $ mkDocId' rng
29+ ]
30+
31+
32+mkDocId' :: RNG -> IO DocId
33+mkDocId' rng = do
34+ is <- withRNG rng $ \gen -> replicateM len $ mk gen
35+ return . DocId . concatMap (flip showHex "") $ is
36+ where
37+ len = 32
38+ mk :: GenIO -> IO Int
39+ mk = uniformR (0,15)
40+
41+deriving instance NFData DocId