on master help sign in
Merge pull request #405 from phadej/encode-map-benchmarks
59b59d6Adam Bergmark
benchmarks/AesonMap.hs+71−37
@@ -76,17 +76,23 @@ instance FromJSONKey T3 where
76-- Values
76-- Values
77-------------------------------------------------------------------------------
77-------------------------------------------------------------------------------
78
78
79+value10, value100, value1000, value10000 :: HM.HashMap T.Text T.Text
80+value10 = value 10
81+value100 = value 100
82+value1000 = value 1000
83+value10000 = value 10000
84+
79encodedValue10 :: LBS.ByteString
85encodedValue10 :: LBS.ByteString
80−encodedValue10 = encode $ value 10
86+encodedValue10 = encode $ value10
81
87
82encodedValue100 :: LBS.ByteString
88encodedValue100 :: LBS.ByteString
83−encodedValue100 = encode $ value 100
89+encodedValue100 = encode $ value100
84
90
85encodedValue1000 :: LBS.ByteString
91encodedValue1000 :: LBS.ByteString
86−encodedValue1000 = encode $ value 1000
92+encodedValue1000 = encode $ value1000
87
93
88encodedValue10000 :: LBS.ByteString
94encodedValue10000 :: LBS.ByteString
89−encodedValue10000 = encode $ value 10000
95+encodedValue10000 = encode $ value10000
90
96
91-------------------------------------------------------------------------------
97-------------------------------------------------------------------------------
92-- Helpers
98-- Helpers
@@ -125,45 +131,73 @@ benchDecodeHM
125 :: String
131 :: String
126 -> LBS.ByteString
132 -> LBS.ByteString
127 -> Benchmark
133 -> Benchmark
128−benchDecodeHM name val =
134+benchDecodeHM name val = bgroup name
129− bgroup name
130− [ bench "Text" $ nf (decodeHM proxyText) val
135+ [ bench "Text" $ nf (decodeHM proxyText) val
131− , bench "Identity" $ nf (decodeHM proxyT1) val
136+ , bench "Identity" $ nf (decodeHM proxyT1) val
132− , bench "Coerce" $ nf (decodeHM proxyT2) val
137+ , bench "Coerce" $ nf (decodeHM proxyT2) val
133− , bench "Parser" $ nf (decodeHM proxyT3) val
138+ , bench "Parser" $ nf (decodeHM proxyT3) val
134− , bench "Tagged Text" $ nf (decodeHM $ proxyTagged proxyText) val
139+ , bench "Tagged Text" $ nf (decodeHM $ proxyTagged proxyText) val
135− , bench "Tagged Identity" $ nf (decodeHM $ proxyTagged proxyT1) val
140+ , bench "Tagged Identity" $ nf (decodeHM $ proxyTagged proxyT1) val
136− , bench "Tagged Coerce" $ nf (decodeHM $ proxyTagged proxyT2) val
141+ , bench "Tagged Coerce" $ nf (decodeHM $ proxyTagged proxyT2) val
137− , bench "Tagged Parser" $ nf (decodeHM $ proxyTagged proxyT3) val
142+ , bench "Tagged Parser" $ nf (decodeHM $ proxyTagged proxyT3) val
138− ]
143+ ]
139
144
140benchDecodeMap
145benchDecodeMap
141 :: String
146 :: String
142 -> LBS.ByteString
147 -> LBS.ByteString
143 -> Benchmark
148 -> Benchmark
144−benchDecodeMap name val =
149+benchDecodeMap name val = bgroup name
145− bgroup name
146− [ bench "Text" $ nf (decodeMap proxyText) val
150+ [ bench "Text" $ nf (decodeMap proxyText) val
147− , bench "Identity" $ nf (decodeMap proxyT1) val
151+ , bench "Identity" $ nf (decodeMap proxyT1) val
148− , bench "Coerce" $ nf (decodeMap proxyT2) val
152+ , bench "Coerce" $ nf (decodeMap proxyT2) val
149− , bench "Parser" $ nf (decodeMap proxyT3) val
153+ , bench "Parser" $ nf (decodeMap proxyT3) val
154+ ]
155+
156+benchEncodeHM
157+ :: String
158+ -> HM.HashMap T.Text T.Text
159+ -> Benchmark
160+benchEncodeHM name val = bgroup name
161+ [ bench "Text" $ nf encode val
162+ ]
163+
164+benchEncodeMap
165+ :: String
166+ -> HM.HashMap T.Text T.Text
167+ -> Benchmark
168+benchEncodeMap name val = bgroup name
169+ [ bench "Text" $ nf encode val'
150− ]
170+ ]
171+ where
172+ val' :: M.Map T.Text T.Text
173+ val' = M.fromList . HM.toList $ val
151
174
152main :: IO ()
175main :: IO ()
153−main = do
154− defaultMain
176+main = defaultMain
155− [ bgroup "decode"
177+ [ bgroup "decode"
156− [ bgroup "HashMap"
178+ [ bgroup "HashMap"
157− [ benchDecodeHM "10" encodedValue10
179+ [ benchDecodeHM "10" encodedValue10
158− , benchDecodeHM "100" encodedValue100
180+ , benchDecodeHM "100" encodedValue100
159− , benchDecodeHM "1000" encodedValue1000
181+ , benchDecodeHM "1000" encodedValue1000
160− , benchDecodeHM "10000" encodedValue10000
182+ , benchDecodeHM "10000" encodedValue10000
161− ]
183+ ]
162− , bgroup "Map"
184+ , bgroup "Map"
163− [ benchDecodeMap "10" encodedValue10
185+ [ benchDecodeMap "10" encodedValue10
164− , benchDecodeMap "100" encodedValue100
186+ , benchDecodeMap "100" encodedValue100
165− , benchDecodeMap "1000" encodedValue1000
187+ , benchDecodeMap "1000" encodedValue1000
166− , benchDecodeMap "10000" encodedValue10000
188+ , benchDecodeMap "10000" encodedValue10000
167− ]
189+ ]
190+ ]
191+ , bgroup "encode"
192+ [ bgroup "HashMap"
193+ [ benchEncodeHM "100" value100
194+ , benchEncodeHM "1000" value1000
195+ , benchEncodeHM "10000" value10000
196+ ]
197+ , bgroup "Map"
198+ [ benchEncodeMap "100" value100
199+ , benchEncodeMap "1000" value1000
200+ , benchEncodeMap "10000" value10000
168 ]
201 ]
169 ]
202 ]
203+ ]