on master help sign in
Build Haskell benchmarks with cabal
17013ccBryan O'Sullivan
.hgignore+1−1
@@ -1,6 +1,6 @@
1.*\.(?:aux|h[ip]|o|orig|out|pdf|prof|ps|rej)$
1.*\.(?:aux|h[ip]|o|orig|out|pdf|prof|ps|rej)$
2^(?:dist|\.DS_Store)$
2^(?:dist|\.DS_Store)$
3−^benchmarks/(?:AesonParse|AesonEncode|JsonParse|.*_p)$
3+^benchmarks/dist$
4^tests/(?:qc)
4^tests/(?:qc)
5
5
6syntax: glob
6syntax: glob
aeson.cabal+1
@@ -84,6 +84,7 @@ description:
84
84
85extra-source-files:
85extra-source-files:
86 README.markdown
86 README.markdown
87+ benchmarks/*.cabal
87 benchmarks/*.hs
88 benchmarks/*.hs
88 benchmarks/*.py
89 benchmarks/*.py
89 benchmarks/Makefile
90 benchmarks/Makefile
benchmarks/AesonEncode.hs−2
@@ -3,8 +3,6 @@
3import Control.Exception
3import Control.Exception
4import Control.Monad
4import Control.Monad
5import Data.Aeson
5import Data.Aeson
6−import Data.Aeson.Encode
7−import Data.Aeson.Parser
8import Data.Attoparsec
6import Data.Attoparsec
9import Data.Time.Clock
7import Data.Time.Clock
10import System.Environment (getArgs)
8import System.Environment (getArgs)
benchmarks/AesonParse.hs−2
@@ -1,10 +1,8 @@
1{-# LANGUAGE BangPatterns, OverloadedStrings #-}
1{-# LANGUAGE BangPatterns, OverloadedStrings #-}
2
2
3−import Control.DeepSeq
4import Control.Exception
3import Control.Exception
5import Control.Monad
4import Control.Monad
6import Data.Aeson
5import Data.Aeson
7−import Data.Aeson.Parser
8import Data.Attoparsec
6import Data.Attoparsec
9import Data.Time.Clock
7import Data.Time.Clock
10import System.Environment (getArgs)
8import System.Environment (getArgs)
benchmarks/CompareWithJSON.hs+2−2
@@ -36,7 +36,7 @@ decodeA s = case A.decode' s of
36 Just v -> v
36 Just v -> v
37
37
38jsonData :: FilePath
38jsonData :: FilePath
39−jsonData = "benchmarks/json-data/jp100.json"
39+jsonData = "json-data/jp100.json"
40
40
41main :: IO ()
41main :: IO ()
42main = do
42main = do
@@ -44,7 +44,7 @@ main = do
44 as <- BL.readFile jsonData
44 as <- BL.readFile jsonData
45 let jdata = decodeJ js
45 let jdata = decodeJ js
46 adata = decodeA as
46 adata = decodeA as
47− (jdata, adata) `deepseq` defaultMain [
47+ defaultMain [
48 bgroup "decode" [ bench "json" $ nf decodeJ js
48 bgroup "decode" [ bench "json" $ nf decodeJ js
49 , bench "aeson" $ nf decodeA as
49 , bench "aeson" $ nf decodeA as
50 ],
50 ],
benchmarks/JsonParse.hs+1−2
@@ -1,13 +1,12 @@
1{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
1{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
2+{-# OPTIONS_GHC -fno-warn-orphans #-}
2
3
3import Control.DeepSeq
4import Control.DeepSeq
4−import Control.Exception
5import Control.Monad
5import Control.Monad
6import Text.JSON
6import Text.JSON
7import Data.Time.Clock
7import Data.Time.Clock
8import System.Environment (getArgs)
8import System.Environment (getArgs)
9import System.IO
9import System.IO
10−import qualified Data.ByteString as B
11
10
12instance NFData JSValue where
11instance NFData JSValue where
13 rnf JSNull = ()
12 rnf JSNull = ()
benchmarks/aeson-benchmarks.cabalnew file+39
@@ -0,0 +1,39 @@
1+name: aeson-benchmarks
2+version: 0
3+build-type: Simple
4+
5+cabal-version: >=1.2
6+
7+executable aeson-benchmark-compare-with-json
8+ main-is: CompareWithJSON.hs
9+ ghc-options: -Wall -O2
10+ build-depends:
11+ aeson == 0.4.0.0,
12+ base,
13+ bytestring,
14+ criterion,
15+ json
16+
17+executable aeson-benchmark-aeson-encode
18+ main-is: AesonEncode.hs
19+ ghc-options: -Wall -O2
20+ build-depends:
21+ aeson == 0.4.0.0,
22+ base
23+
24+executable aeson-benchmark-aeson-parse
25+ main-is: AesonParse.hs
26+ ghc-options: -Wall -O2
27+ build-depends:
28+ aeson == 0.4.0.0,
29+ attoparsec,
30+ base
31+
32+executable aeson-benchmark-json-parse
33+ main-is: JsonParse.hs
34+ ghc-options: -Wall -O2
35+ build-depends:
36+ base,
37+ deepseq,
38+ json,
39+ time