on master help sign in
Added CompareWithJSON benchmark from issue: #56
commit102bdd7472117f519c9a8fe42f14380f4ba0559e authorBas van Dijk <v.dijk.bas@gmail.com> dateWed 21 Dec 2011, 21:30 (15 years ago) parentc83b099
1 file changed+54
benchmarks/CompareWithJSON.hs+54
benchmarks/CompareWithJSON.hsnew file+54
@@ -0,0 +1,54 @@
1+{-# OPTIONS_GHC -fno-warn-orphans#-}
2+
3+import Criterion.Main
4+import Control.DeepSeq
5+import Data.Int
6+import qualified Data.ByteString.Lazy as BL
7+import qualified Text.JSON as J
8+import qualified Data.Aeson as A
9+
10+instance (NFData v) => NFData (J.JSObject v) where
11+ rnf o = rnf (J.fromJSObject o)
12+
13+instance NFData J.JSValue where
14+ rnf J.JSNull = ()
15+ rnf (J.JSBool b) = rnf b
16+ rnf (J.JSRational a b) = rnf a `seq` rnf b `seq` ()
17+ rnf (J.JSString s) = rnf (J.fromJSString s)
18+ rnf (J.JSArray lst) = rnf lst
19+ rnf (J.JSObject o) = rnf o
20+
21+encodeJ :: J.JSObject J.JSValue -> Int
22+encodeJ = length . J.encode
23+
24+encodeA :: A.Value -> Int64
25+encodeA = BL.length . A.encode
26+
27+decodeJ :: String -> J.JSObject J.JSValue
28+decodeJ s =
29+ case J.decodeStrict s of
30+ J.Ok v -> v
31+ J.Error _ -> error "fail to parse via JSON"
32+
33+decodeA :: BL.ByteString -> A.Value
34+decodeA s = case A.decode' s of
35+ Nothing -> error "fail to parse via Aeson"
36+ Just v -> v
37+
38+jsonData :: FilePath
39+jsonData = "benchmarks/json-data/jp100.json"
40+
41+main :: IO ()
42+main = do
43+ js <- readFile jsonData
44+ as <- BL.readFile jsonData
45+ let jdata = decodeJ js
46+ adata = decodeA as
47+ (jdata, adata) `deepseq` defaultMain [
48+ bgroup "decode" [ bench "json" $ nf decodeJ js
49+ , bench "aeson" $ nf decodeA as
50+ ],
51+ bgroup "encode" [ bench "json" $ nf encodeJ jdata
52+ , bench "aeson" $ nf encodeA adata
53+ ]
54+ ]