From 8f4b37b5b930ad456b427e0cf97dac276ec83b4a Mon Sep 17 00:00:00 2001 From: Sam T Date: Wed, 3 Apr 2013 01:15:04 +0400 Subject: + bench --- bench/serialization.hs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 bench/serialization.hs (limited to 'bench/serialization.hs') diff --git a/bench/serialization.hs b/bench/serialization.hs new file mode 100644 index 00000000..31b5b0bf --- /dev/null +++ b/bench/serialization.hs @@ -0,0 +1,41 @@ +{-# OPTIONS -fno-warn-orphans #-} +module Main (main) where + +import Control.Applicative +import Control.DeepSeq +import Criterion.Main +import Data.ByteString (ByteString) +import Data.Serialize +import Network.Torrent.PWP + + +instance NFData BlockIx where + rnf (BlockIx a b c) = a `deepseq` b `deepseq` rnf c + +instance NFData Block where + rnf (Block a b c) = a `deepseq` b `deepseq` rnf c + +instance NFData Message where + rnf (Have i) = rnf i + rnf (Bitfield b) = rnf b + rnf (Request b) = rnf b + rnf (Piece b) = rnf b + rnf (Cancel b) = rnf b + rnf (Port i) = rnf i + rnf _ = () -- other fields are forced by pattern matching + +encodeMessages :: [Message] -> ByteString +encodeMessages xs = runPut (mapM_ put xs) + +decodeMessages :: ByteString -> Either String [Message] +decodeMessages = runGet (many get) + +main :: IO () +main = do + let datas = replicate 100000 (Request (BlockIx 0 0 0)) + + defaultMain + [ datas `deepseq` bench "message/encode" $ nf encodeMessages datas + , let binary = encodeMessages datas in + binary `deepseq` bench "message/decode" $ nf decodeMessages binary + ] \ No newline at end of file -- cgit v1.2.3