@@ -1,3 +1,4 @@
1+{-# LANGUAGE PackageImports #-}
12{-# OPTIONS_GHC -fno-warn-orphans #-}
23
34module Main (main) where
@@ -10,8 +11,11 @@ import Blaze.ByteString.Builder.Char.Utf8 (fromString)
1011import Control.DeepSeq (NFData(rnf))
1112import Criterion.Main
1213import Data.Maybe (fromMaybe)
13−import qualified Data.Aeson as A
14−import qualified Data.Aeson.Text as A
14+import qualified "aeson-benchmarks" Data.Aeson as A
15+import qualified "aeson-benchmarks" Data.Aeson.Text as A
16+import qualified "aeson-benchmarks" Data.Aeson.Parser.Internal as I
17+import qualified "aeson" Data.Aeson as B
18+import qualified Data.ByteString as BS
1519import qualified Data.ByteString.Lazy as BL
1620import qualified Data.Text.Lazy as TL
1721import qualified Data.Text.Lazy.Builder as TLB
@@ -41,6 +45,19 @@ decodeA s = fromMaybe (error "fail to parse via Aeson") $ A.decode s
4145decodeA' :: BL.ByteString -> A.Value
4246decodeA' s = fromMaybe (error "fail to parse via Aeson") $ A.decode' s
4347
48+decodeAS :: BS.ByteString -> A.Value
49+decodeAS s = fromMaybe (error "fail to parse via Aeson") $ A.decodeStrict' s
50+
51+decodeB :: BL.ByteString -> B.Value
52+decodeB s = fromMaybe (error "fail to parse via Aeson") $ B.decode s
53+
54+decodeBS :: BS.ByteString -> B.Value
55+decodeBS s = fromMaybe (error "fail to parse via Aeson") $ B.decodeStrict' s
56+
57+decodeIP :: BL.ByteString -> A.Value
58+decodeIP s = fromMaybe (error "fail to parse via Parser.decodeWith") $
59+ I.decodeWith I.jsonEOF A.fromJSON s
60+
4461encodeJ :: J.JSValue -> BL.ByteString
4562encodeJ = toLazyByteString . fromString . J.encode
4663
@@ -55,19 +72,27 @@ main = do
5572 let enFile = "json-data/twitter100.json"
5673 jpFile = "json-data/jp100.json"
5774 enA <- BL.readFile enFile
75+ enS <- BS.readFile enFile
5876 enJ <- readFile enFile
5977 jpA <- BL.readFile jpFile
78+ jpS <- BS.readFile jpFile
6079 jpJ <- readFile jpFile
6180 defaultMain [
6281 bgroup "decode" [
6382 bgroup "en" [
64− bench "aeson/lazy" $ nf decodeA enA
65− , bench "aeson/strict" $ nf decodeA' enA
66− , bench "json" $ nf decodeJ enJ
83+ bench "aeson/lazy" $ nf decodeA enA
84+ , bench "aeson/strict" $ nf decodeA' enA
85+ , bench "aeson/stricter" $ nf decodeAS enS
86+ , bench "aeson/hackage" $ nf decodeB enA
87+ , bench "aeson/hackage'" $ nf decodeBS enS
88+ , bench "aeson/parser" $ nf decodeIP enA
89+ , bench "json" $ nf decodeJ enJ
6790 ]
6891 , bgroup "jp" [
69− bench "aeson" $ nf decodeA jpA
70− , bench "json" $ nf decodeJ jpJ
92+ bench "aeson" $ nf decodeA jpA
93+ , bench "aeson/stricter" $ nf decodeAS jpS
94+ , bench "aeson/hackage" $ nf decodeB jpA
95+ , bench "json" $ nf decodeJ jpJ
7196 ]
7297 ]
7398 , bgroup "encode" [