on master help sign in
Consolidate encoding comparison benchmarks
commit309559ca2dedc8368933c4fff702030721e18659 authorBryan O'Sullivan <bos@serpentine.com> dateTue 7 Jul 2015, 22:06 (11 years ago) parente526521
3 files changed+24−34
benchmarks/Compare.hs+14−8 benchmarks/JsonBench.hs → benchmarks/Compare/JsonBench.hs+10−11 benchmarks/aeson-benchmarks.cabal−15
benchmarks/Compare.hs+14−8
@@ -1,20 +1,26 @@
1+{-# LANGUAGE ScopedTypeVariables #-}
2+
13module Main (main) where
24
3−import Criterion.Main
4−import Data.Json.Builder
5−import Data.BufferBuilder.Json
65import Compare.BufferBuilder ()
76import Compare.JsonBuilder ()
7+import Criterion.Main
8+import Data.BufferBuilder.Json
9+import Data.Json.Builder
810import Twitter
911import Twitter.Manual ()
1012import Typed.Common
13+import qualified Compare.JsonBench as JsonBench
1114import qualified Data.Aeson as Aeson
1215
1316main :: IO ()
14−main = do
15− twtr <- load "json-data/twitter100.json" :: IO Result
17+main =
1618 defaultMain [
17− bench "aeson" $ nf Aeson.encode twtr
18− , bench "buffer-builder" $ nf encodeJson twtr
19− , bench "json-builder" $ nf toJsonLBS twtr
19+ env (load "json-data/twitter100.json") $ \ ~(twtr :: Result) ->
20+ bgroup "twitter" [
21+ bench "aeson" $ nf Aeson.encode twtr
22+ , bench "buffer-builder" $ nf encodeJson twtr
23+ , bench "json-builder" $ nf toJsonLBS twtr
24+ ]
25+ , JsonBench.benchmarks
2026 ]
benchmarks/JsonBench.hs → benchmarks/Compare/JsonBench.hsrenamed+10−11
@@ -6,18 +6,17 @@
66{-# LANGUAGE GeneralizedNewtypeDeriving #-}
77{-# LANGUAGE MagicHash, ScopedTypeVariables #-}
88
9−module Main (main) where
9+module Compare.JsonBench (benchmarks) where
1010
1111import Control.DeepSeq (NFData(..))
1212import Criterion
13−import Criterion.Main
1413import Data.Aeson ((.:))
1514import Data.Monoid ((<>))
1615import Data.Text (Text)
16+import Typed.Common (load)
1717import qualified Data.Aeson as Aeson
1818import qualified Data.BufferBuilder.Json as Json
1919import qualified Data.Json.Builder as JB
20−import Typed.Common (load)
2120
2221data EyeColor = Green | Blue | Brown
2322 deriving (Eq, Show)
@@ -316,11 +315,11 @@ instance JB.Value User where
316315 <> t "greeting" `JB.row` uGreeting
317316 <> t "favoriteFruit" `JB.row` uFavouriteFruit
318317
319−main :: IO ()
320−main = do
321− (parsedUserList :: [User]) <- load "json-data/buffer-builder.json"
322−
323− defaultMain [ bench "bufferbuilder" $ nf Json.encodeJson parsedUserList
324− , bench "aeson" $ nf Aeson.encode parsedUserList
325− , bench "json-builder" $ nf JB.toJsonLBS parsedUserList
326− ]
318+benchmarks :: Benchmark
319+benchmarks = env (load "json-data/buffer-builder.json") $
320+ \ ~(parsedUserList :: [User]) ->
321+ bgroup "json-bench" [
322+ bench "buffer-builder" $ nf Json.encodeJson parsedUserList
323+ , bench "aeson" $ nf Aeson.encode parsedUserList
324+ , bench "json-builder" $ nf JB.toJsonLBS parsedUserList
325+ ]
benchmarks/aeson-benchmarks.cabal−15
@@ -70,21 +70,6 @@ executable aeson-benchmark-compare
7070 json-builder,
7171 text
7272
73−executable aeson-benchmark-json-bench
74− main-is: JsonBench.hs
75− ghc-options: -Wall -O2 -rtsopts
76− build-depends:
77− aeson-benchmarks,
78− base,
79− buffer-builder,
80− bytestring,
81− criterion >= 1.0,
82− deepseq,
83− ghc-prim,
84− json-builder,
85− text,
86− vector
87−
8873executable aeson-benchmark-micro
8974 main-is: Micro.hs
9075 hs-source-dirs: ../examples .