{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-unused-do-bind #-} {-# LANGUAGE OverloadedStrings #-} import Criterion.Main import Text.Damn.Packet import Data.Maybe (fromJust) import Data.Monoid import Data.ByteString (ByteString) main :: IO () main = defaultMain [ bgroup "Parsing" [ bench "phony" $ nf parse' "" , bench "cmd" $ nf parse' cmd , bench "cmdParam" $ nf parse' cmdParam , bench "cmdArgs" $ nf parse' cmdArgs , bench "cmdParamArgs" $ nf parse' cmdParamArgs , bench "cmdBody" $ nf parse' cmdBody , bench "cmdParamBody" $ nf parse' cmdParamBody , bench "cmdArgsBody" $ nf parse' cmdArgsBody , bench "cmdParamArgsBody" $ nf parse' cmdParamArgsBody ] , bgroup "Rendering" [ bench "cmd" $ nf render cmdPkt , bench "cmdParam" $ nf render cmdParamPkt , bench "cmdArgs" $ nf render cmdArgsPkt , bench "cmdParamArgs" $ nf render cmdParamArgsPkt , bench "cmdBody" $ nf render cmdBodyPkt , bench "cmdParamBody" $ nf render cmdParamBodyPkt , bench "cmdArgsBody" $ nf render cmdArgsBodyPkt , bench "cmdParamArgsBody" $ nf render cmdParamArgsBodyPkt ] ] cmd, cmdParam, cmdArgs, cmdParamArgs, cmdBody, cmdParamBody, cmdArgsBody, cmdParamArgsBody :: ByteString cmd = "ping" cmdParam = "ping foobar" cmdArgs = "ping\nfoo=bar\nbaz=qux" cmdParamArgs = "ping foobar\nfoo=bar\nbaz=qux" cmdBody = cmd <> "\n\nfoobar" cmdParamBody = cmdParam <> "\n\nfoobar" cmdArgsBody = cmdArgs <> "\n\nfoobar" cmdParamArgsBody = cmdParamArgs <> "\n\nfoobar" cmdPkt, cmdParamPkt, cmdArgsPkt, cmdParamArgsPkt, cmdBodyPkt, cmdParamBodyPkt, cmdArgsBodyPkt, cmdParamArgsBodyPkt :: Packet cmdPkt = fromJust $! parse' cmd cmdParamPkt = fromJust $! parse' cmdParam cmdArgsPkt = fromJust $! parse' cmdArgs cmdParamArgsPkt = fromJust $! parse' cmdParamArgs cmdBodyPkt = fromJust $! parse' cmdBody cmdParamBodyPkt = fromJust $! parse' cmdParamBody cmdArgsBodyPkt = fromJust $! parse' cmdArgsBody cmdParamArgsBodyPkt = fromJust $! parse' cmdParamArgsBody