packages feed

data-sketches-0.3.0.0: bench/Bench.hs

{-# 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
          update sk 1
      , bench "insert/10" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
          mapM_ (update sk) [1..10]
      , bench "insert/100" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
          mapM_ (update sk) [1..100]
      , bench "insert/1000" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
          mapM_ (update sk) [1..1000]
      , bench "insert/10000" $ perRunEnv (mkReqSketch 6 HighRanksAreAccurate) $ \sk -> do
          mapM_ (update sk) [1..10000]
      , bench "insert/existing" $ whnfIO $ update outerSketch 1
      , bench "insert/mvar" $ whnfIO $ withMVar skM (`update` 1)
      ]
    , bgroup "DoubleBuffer"
      [ -- bench "sort" $ 
      ]
    -- , bgroup "Prometheus"
    --   [ bench "insert/existing" $ whnfIO $
    --       observe prometheusThing 1
    --   ]
    ]