{-# OPTIONS_GHC -fno-full-laziness #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE TypeApplications #-}
import Control.Monad (forM_)
import Criterion.Main
import Criterion.Types
import Data.List (foldl')
import DataSketches.Quantiles.RelativeErrorQuantile
-- import Prometheus (register, summary, defaultQuantiles, observe, Info (Info))
import Control.Concurrent (withMVar, newMVar)
main :: IO ()
main = do
outerSketch <- mkReqSketch 6 HighRanksAreAccurate
-- let metric = summary (Info "adversarial_input" "woo") defaultQuantiles
-- prometheusThing <- register metric
skM <- newMVar =<< mkReqSketch 6 HighRanksAreAccurate
-- mapM_ (update outerSketch) [1..10000]
defaultMain
[ bgroup "ReqSketch"
[ bench "insert/1" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
insert sk 1
, bench "insert/10" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
mapM_ (insert sk) [1..10]
, bench "insert/100" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
mapM_ (insert sk) [1..100]
, bench "insert/1000" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
mapM_ (insert sk) [1..1000]
, bench "insert/10000" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
mapM_ (insert sk) [1..10000]
, bench "insert/existing" $ whnfIO $ insert outerSketch 1
, bench "insert/mvar" $ whnfIO $ withMVar skM (`insert` 1)
]
, bgroup "DoubleBuffer"
[ -- bench "sort" $
]
-- , bgroup "Prometheus"
-- [ bench "insert/existing" $ whnfIO $
-- observe prometheusThing 1
-- ]
]