git.iko.soy/typeable/attoparsec
on master help sign in
Merge new benchmarks from 0.11
commit05fc26c07fd52a6fc15322bb3c48479c82f66352 authorBryan O'Sullivan <bos@serpentine.com> dateTue 20 May 2014, 23:04 (12 years ago) parentb500eeee5a681b
4 files changed+42−8
benchmarks/Benchmarks.hs+1 benchmarks/Common.hs+15−1 benchmarks/HeadersByteString.hs+13−4 benchmarks/HeadersText.hs+13−3
benchmarks/Benchmarks.hs+1
@@ -1,5 +1,6 @@
11{-# LANGUAGE BangPatterns, CPP #-}
22
3+import Common ()
34import Control.Applicative (many)
45import Criterion.Main (bench, bgroup, defaultMain, nf)
56import Data.Bits
benchmarks/Common.hs+15−1
@@ -1,10 +1,18 @@
11{-# LANGUAGE CPP #-}
22{-# OPTIONS_GHC -fno-warn-orphans #-}
33
4−module Common (chunksOf) where
4+module Common (
5+ chunksOf
6+ , rechunkBS
7+ , rechunkT
8+ ) where
59
610import Control.DeepSeq (NFData(rnf))
711import Text.Parsec (ParseError)
12+import qualified Data.ByteString as B
13+import qualified Data.ByteString.Lazy as BL
14+import qualified Data.Text as T
15+import qualified Data.Text.Lazy as TL
816
917#if !MIN_VERSION_bytestring(0,10,0)
1018import Data.ByteString.Internal (ByteString(..))
@@ -21,3 +29,9 @@ chunksOf k = go
2129 where go xs = case splitAt k xs of
2230 ([],_) -> []
2331 (y, ys) -> y : go ys
32+
33+rechunkBS :: Int -> B.ByteString -> BL.ByteString
34+rechunkBS n = BL.fromChunks . map B.pack . chunksOf n . B.unpack
35+
36+rechunkT :: Int -> T.Text -> TL.Text
37+rechunkT n = TL.fromChunks . map T.pack . chunksOf n . T.unpack
benchmarks/HeadersByteString.hs+13−4
@@ -2,11 +2,12 @@
22{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
33module HeadersByteString (headers) where
44
5−import Common ()
5+import Common (rechunkBS)
66import Control.Applicative
77import Criterion.Main (bench, bgroup, nf)
88import Criterion.Types (Benchmark)
99import qualified Data.Attoparsec.ByteString.Char8 as B
10+import qualified Data.Attoparsec.ByteString.Lazy as BL
1011import qualified Data.ByteString.Char8 as B
1112
1213header = do
@@ -41,7 +42,15 @@ headers :: IO Benchmark
4142headers = do
4243 req <- B.readFile "http-request.txt"
4344 resp <- B.readFile "http-response.txt"
44− return $ bgroup "headersBS" [
45− bench "request" $ nf (B.parseOnly request) req
46− , bench "response" $ nf (B.parseOnly response) resp
45+ let reql = rechunkBS 4 req
46+ respl = rechunkBS 4 resp
47+ return $ bgroup "headers" [
48+ bgroup "B" [
49+ bench "request" $ nf (B.parseOnly request) req
50+ , bench "response" $ nf (B.parseOnly response) resp
51+ ]
52+ , bgroup "BL" [
53+ bench "request" $ nf (BL.parse request) reql
54+ , bench "response" $ nf (BL.parse response) respl
55+ ]
4756 ]
benchmarks/HeadersText.hs+13−3
@@ -2,11 +2,13 @@
22{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
33module HeadersText (headers) where
44
5+import Common (rechunkT)
56import Control.Applicative
67import Criterion.Main (bench, bgroup, nf)
78import Criterion.Types (Benchmark)
89import Data.Char (isSpace)
910import qualified Data.Attoparsec.Text as T
11+import qualified Data.Attoparsec.Text.Lazy as TL
1012import qualified Data.Text.IO as T
1113
1214header = do
@@ -41,7 +43,15 @@ headers :: IO Benchmark
4143headers = do
4244 req <- T.readFile "http-request.txt"
4345 resp <- T.readFile "http-response.txt"
44− return $ bgroup "headersT" [
45− bench "request" $ nf (T.parseOnly request) req
46− , bench "response" $ nf (T.parseOnly response) resp
46+ let reql = rechunkT 4 req
47+ respl = rechunkT 4 resp
48+ return $ bgroup "headers" [
49+ bgroup "T" [
50+ bench "request" $ nf (T.parseOnly request) req
51+ , bench "response" $ nf (T.parseOnly response) resp
52+ ]
53+ , bgroup "TL" [
54+ bench "request" $ nf (TL.parse request) reql
55+ , bench "response" $ nf (TL.parse response) respl
56+ ]
4757 ]