packages feed

snap-server-0.2.12: test/benchmark/Snap/Internal/Http/Parser/Benchmark.hs

{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE PackageImports #-}

module Snap.Internal.Http.Parser.Benchmark 
       ( benchmarks )
       where

import             Criterion.Main hiding (run)
import             Snap.Internal.Http.Parser
import             Data.ByteString (ByteString)
import qualified   Data.ByteString as S
import qualified   Snap.Iteratee as SI
import qualified   Control.Exception as E
import             Data.Attoparsec hiding (Result(..))
import             Snap.Internal.Http.Parser.Data
import "monads-fd" Control.Monad.Identity
import             Data.Iteratee
import             Data.Iteratee.WrappedByteString
import             Snap.Iteratee hiding (take, foldl', filter)
import qualified Data.ByteString.Lazy.Char8 as L

parseGet ::  IO ()
parseGet = SI.enumBS parseGetData parseRequest >>= SI.run >> return ()

parseChunked :: IO ()
parseChunked = do
  c <- toChunked parseChunkedData
  i <- SI.enumLBS c (readChunkedTransferEncoding stream2stream)
  f <- SI.run i
  return ()

-- utils
toChunked lbs = writeChunkedTransferEncoding stream2stream >>=
                enumLBS lbs >>= run >>= return . fromWrap

benchmarks = bgroup "parser"
             [ bench "firefoxget" $ whnfIO parseGet
             , bench "readChunkedTransferEncoding" $ whnfIO parseChunked ]