ron-0.3: bench/Main.hs
{-# OPTIONS -Wno-orphans #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE StandaloneDeriving #-}
import Control.DeepSeq (NFData, force)
import Control.Exception (evaluate)
import Control.Monad (void)
import Criterion (bench, nf)
import Criterion.Main (defaultConfig, defaultMainWith)
import Criterion.Types (timeLimit)
import RON.Text (parseWireFrames, serializeWireFrames)
import RON.Types (Atom, Op (..), RawOp (..), UUID, WireChunk (Raw),
WireReducedChunk)
import qualified RON.UUID as UUID
deriving instance NFData Atom
deriving instance NFData Op
deriving instance NFData RawOp
deriving instance NFData UUID
deriving instance NFData WireChunk
deriving instance NFData WireReducedChunk
main :: IO ()
main = do
void . evaluate $ force serialized
defaultMainWith
defaultConfig{timeLimit = 1}
[bench (show n) $ nf parseWireFrames batch | (n, batch) <- serialized]
where
rawop = RawOp{opType = UUID.zero, opObject = UUID.zero, op}
op = Op{opEvent = UUID.zero, opRef = UUID.zero, opPayload = []}
frame n = replicate n $ Raw rawop
serialized =
[ (n :: Int, serializeWireFrames $ replicate 100 $ frame n)
| i <- [1 .. 10], let n = 100 * i
]