on master help sign in
Run vector benchmarks with released aeson
commit054a5c2367b38ee48eb24d578b527657d5256c2c authorOleg Grenrus <oleg.grenrus@iki.fi> dateFri 8 Jul 2016, 17:22 (10 years ago) parent2d2b699
4 files changed+56−25
Data/Aeson/Types/ToJSON.hs+2−2 benchmarks/AesonFoldable.hs+49−20 benchmarks/AesonMap.hs+3−3 benchmarks/aeson-benchmarks.cabal+2
Data/Aeson/Types/ToJSON.hs+2−2
@@ -1808,10 +1808,10 @@ instance ToJSON1 Vector where
18081808 {-# INLINE liftToEncoding #-}
18091809
18101810instance (ToJSON a) => ToJSON (Vector a) where
1811− toJSON = Array . V.map toJSON
1811+ toJSON = toJSON1
18121812 {-# INLINE toJSON #-}
18131813
1814− toEncoding = encodeVector
1814+ toEncoding = toEncoding1
18151815 {-# INLINE toEncoding #-}
18161816
18171817encodeVector :: (ToJSON a, VG.Vector v a) => v a -> Encoding
benchmarks/AesonFoldable.hs+49−20
@@ -1,6 +1,9 @@
1−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE OverloadedStrings, PackageImports #-}
22import Criterion.Main
3−import Data.Aeson
3+
4+import qualified "aeson" Data.Aeson as A
5+import qualified "aeson-benchmarks" Data.Aeson as B
6+
47import Data.Foldable (toList)
58
69import qualified Data.Sequence as S
@@ -13,9 +16,13 @@ import qualified Data.Vector.Unboxed as U
1316
1417newtype L f = L { getL :: f Int }
1518
16−instance Foldable f => ToJSON (L f) where
19+instance Foldable f => B.ToJSON (L f) where
1720 toJSON = error "do not use this"
18− toEncoding = toEncoding . toList . getL
21+ toEncoding = B.toEncoding . toList . getL
22+
23+instance Foldable f => A.ToJSON (L f) where
24+ toJSON = error "do not use this"
25+ toEncoding = A.toEncoding . toList . getL
1926
2027-------------------------------------------------------------------------------
2128-- Foldable
@@ -23,9 +30,13 @@ instance Foldable f => ToJSON (L f) where
2330
2431newtype F f = F { getF :: f Int }
2532
26−instance Foldable f => ToJSON (F f) where
33+instance Foldable f => B.ToJSON (F f) where
34+ toJSON = error "do not use this"
35+ toEncoding = B.foldable . getF
36+
37+instance Foldable f => A.ToJSON (F f) where
2738 toJSON = error "do not use this"
28− toEncoding = foldable . getF
39+ toEncoding = A.foldable . getF
2940
3041-------------------------------------------------------------------------------
3142-- Values
@@ -47,34 +58,52 @@ valueUVector = U.fromList valueList
4758-- Main
4859-------------------------------------------------------------------------------
4960
50−benchEncode
51− :: ToJSON a
61+benchEncodeA
62+ :: A.ToJSON a
63+ => String
64+ -> a
65+ -> Benchmark
66+benchEncodeA name val
67+ = bench ("A " ++ name) $ nf A.encode val
68+
69+benchEncodeB
70+ :: B.ToJSON a
5271 => String
5372 -> a
5473 -> Benchmark
55−benchEncode name val
56− = bench name $ nf encode val
74+benchEncodeB name val
75+ = bench ("B " ++ name) $ nf B.encode val
5776
5877main :: IO ()
5978main = defaultMain
6079 [ bgroup "encode"
6180 [ bgroup "List"
62− [ benchEncode "-" valueList
63− , benchEncode "L" $ L valueList
64− , benchEncode "F" $ F valueList
81+ [ benchEncodeB "-" valueList
82+ , benchEncodeB "L" $ L valueList
83+ , benchEncodeB "F" $ F valueList
84+ , benchEncodeA "-" valueList
85+ , benchEncodeA "L" $ L valueList
86+ , benchEncodeA "F" $ F valueList
6587 ]
6688 , bgroup "Seq"
67− [ benchEncode "-" valueSeq
68− , benchEncode "L" $ L valueSeq
69− , benchEncode "F" $ F valueSeq
89+ [ benchEncodeB "-" valueSeq
90+ , benchEncodeB "L" $ L valueSeq
91+ , benchEncodeB "F" $ F valueSeq
92+ , benchEncodeA "-" valueSeq
93+ , benchEncodeA "L" $ L valueSeq
94+ , benchEncodeA "F" $ F valueSeq
7095 ]
7196 , bgroup "Vector"
72− [ benchEncode "-" valueVector
73− , benchEncode "L" $ L valueVector
74− , benchEncode "F" $ F valueVector
97+ [ benchEncodeB "-" valueVector
98+ , benchEncodeB "L" $ L valueVector
99+ , benchEncodeB "F" $ F valueVector
100+ , benchEncodeA "-" valueVector
101+ , benchEncodeA "L" $ L valueVector
102+ , benchEncodeA "F" $ F valueVector
75103 ]
76104 , bgroup "Vector.Unboxed"
77− [ benchEncode "-" valueUVector
105+ [ benchEncodeB "-" valueUVector
106+ , benchEncodeA "-" valueUVector
78107 ]
79108 ]
80109 ]
benchmarks/AesonMap.hs+3−3
@@ -1,9 +1,9 @@
1−{-# LANGUAGE OverloadedStrings, RankNTypes #-}
1+{-# LANGUAGE OverloadedStrings, RankNTypes, PackageImports #-}
22
33import Control.DeepSeq
44import Criterion.Main
5−import Data.Aeson
6−import Data.Aeson.Types (fromJSONKeyCoerce)
5+import "aeson-benchmarks" Data.Aeson
6+import "aeson-benchmarks" Data.Aeson.Types (fromJSONKeyCoerce)
77import Data.Hashable
88import Data.Proxy (Proxy (..))
99import Data.Tagged (Tagged (..))
benchmarks/aeson-benchmarks.cabal+2
@@ -180,6 +180,7 @@ executable aeson-benchmark-map
180180 main-is: AesonMap.hs
181181 ghc-options: -Wall -O2 -rtsopts
182182 build-depends:
183+ aeson,
183184 aeson-benchmarks,
184185 base,
185186 criterion >= 1.0,
@@ -195,6 +196,7 @@ executable aeson-benchmark-foldable
195196 main-is: AesonFoldable.hs
196197 ghc-options: -Wall -O2 -rtsopts
197198 build-depends:
199+ aeson,
198200 aeson-benchmarks,
199201 base,
200202 criterion >= 1.0,