avro-0.4.4.2: bench/Bench/Deconflict.hs
{-# LANGUAGE NumDecimals #-}
{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
module Bench.Deconflict
( only
)
where
import Data.Avro (toAvro)
import Data.Avro.Deconflict
import Data.Avro.Deriving
import Data.Vector (Vector)
import Text.RawString.QQ
import qualified Bench.Deconflict.Reader as R
import qualified Bench.Deconflict.Writer as W
import qualified Data.Vector as Vector
import qualified System.Random as Random
import Gauge
newOuter :: IO (W.Outer)
newOuter = do
i1 <- Random.randomRIO (minBound, maxBound)
i2 <- Random.randomRIO (minBound, maxBound)
pure $ W.Outer "Written" (W.Inner i1) (W.Inner i2)
many :: Int -> IO a -> IO (Vector a)
many n f = Vector.replicateM n f
-- | Only deconflicts values without actually decoding into generated types
only :: Benchmark
only = env (many 1e5 $ toAvro <$> newOuter) $ \ values ->
bgroup "strict"
[ bgroup "deconflict"
[ bench "plain" $ nf (fmap (deconflict W.schema'Outer R.schema'Outer)) $ values
, bench "noResolve" $ nf (fmap (deconflictNoResolve W.schema'Outer R.schema'Outer)) $ values
]
]