{-# OPTIONS_GHC -fno-warn-orphans #-} {-# OPTIONS_GHC -fno-warn-unused-do-bind #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE StandaloneDeriving #-} import Control.Exception (evaluate) import Criterion.Main import Text.Damn.Packet import Data.Map (fromList) import Data.Maybe (fromJust) import Data.Monoid import Data.Text (Text) main :: IO () main = do 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 :: Text 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 = 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