packages feed

katip-elasticsearch-0.4.0.3: bench/Main.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Main
    ( main
    ) where

-------------------------------------------------------------------------------
import           Control.DeepSeq
import           Control.Monad
import           Criterion.Main
import           Data.Aeson
import qualified Data.HashMap.Strict                  as HM
import           Data.Proxy                           (Proxy (..))
import           System.Random
import qualified Data.Text                            as T
import           Database.V1.Bloodhound.Types
import           Numeric
-------------------------------------------------------------------------------
import           Katip.Scribes.ElasticSearch
import           Katip.Scribes.ElasticSearch.Internal (ESV1)
-------------------------------------------------------------------------------

main :: IO ()
main = do
    defaultMain
      [
        mkDocIdBenchmark
      , deannotateValueBenchmark
      ]

-------------------------------------------------------------------------------
mkDocIdBenchmark :: Benchmark
mkDocIdBenchmark = bgroup "mkDocId"
  [
    bench "mkDocId (randomIO)" $ nfIO (mkDocId (Proxy :: Proxy ESV1))
  , bench "mkDocId' (shared )" $ nfIO mkDocId'
  ]


-------------------------------------------------------------------------------
deannotateValueBenchmark :: Benchmark
deannotateValueBenchmark = bgroup "deannotateValue"
 [
   bench "deannotateValue" $ nf deannotateValue annotatedValue
 ]


-------------------------------------------------------------------------------
annotatedValue :: Value
annotatedValue = Object $ HM.fromList [ ("a::string", String "whatever")
                                      , ("b::double", Number 4.5)
                                      , ("c::long", Number 4)
                                      , ("d::boolean", Bool True)
                                      , ("e::null", Null)
                                      ]

-------------------------------------------------------------------------------
mkDocId' :: IO DocId
mkDocId' = do
    is <- replicateM len (randomRIO (0, 15))
    return (DocId (T.pack (concatMap (`showHex` "") (is :: [Int]))))
  where
    len = 32

deriving instance NFData DocId