@@ -76,17 +76,23 @@ instance FromJSONKey T3 where
7676-- Values
7777-------------------------------------------------------------------------------
7878
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+
7985encodedValue10 :: LBS.ByteString
80−encodedValue10 = encode $ value 10
86+encodedValue10 = encode $ value10
8187
8288encodedValue100 :: LBS.ByteString
83−encodedValue100 = encode $ value 100
89+encodedValue100 = encode $ value100
8490
8591encodedValue1000 :: LBS.ByteString
86−encodedValue1000 = encode $ value 1000
92+encodedValue1000 = encode $ value1000
8793
8894encodedValue10000 :: LBS.ByteString
89−encodedValue10000 = encode $ value 10000
95+encodedValue10000 = encode $ value10000
9096
9197-------------------------------------------------------------------------------
9298-- Helpers
@@ -125,45 +131,73 @@ benchDecodeHM
125131 :: String
126132 -> LBS.ByteString
127133 -> Benchmark
128−benchDecodeHM name val =
129− bgroup name
130− [ bench "Text" $ nf (decodeHM proxyText) val
131− , bench "Identity" $ nf (decodeHM proxyT1) val
132− , bench "Coerce" $ nf (decodeHM proxyT2) val
133− , bench "Parser" $ nf (decodeHM proxyT3) val
134− , bench "Tagged Text" $ nf (decodeHM $ proxyTagged proxyText) val
135− , bench "Tagged Identity" $ nf (decodeHM $ proxyTagged proxyT1) val
136− , bench "Tagged Coerce" $ nf (decodeHM $ proxyTagged proxyT2) val
137− , bench "Tagged Parser" $ nf (decodeHM $ proxyTagged proxyT3) val
138− ]
134+benchDecodeHM name val = bgroup name
135+ [ bench "Text" $ nf (decodeHM proxyText) val
136+ , bench "Identity" $ nf (decodeHM proxyT1) val
137+ , bench "Coerce" $ nf (decodeHM proxyT2) val
138+ , bench "Parser" $ nf (decodeHM proxyT3) val
139+ , bench "Tagged Text" $ nf (decodeHM $ proxyTagged proxyText) val
140+ , bench "Tagged Identity" $ nf (decodeHM $ proxyTagged proxyT1) val
141+ , bench "Tagged Coerce" $ nf (decodeHM $ proxyTagged proxyT2) val
142+ , bench "Tagged Parser" $ nf (decodeHM $ proxyTagged proxyT3) val
143+ ]
139144
140145benchDecodeMap
141146 :: String
142147 -> LBS.ByteString
143148 -> Benchmark
144−benchDecodeMap name val =
145− bgroup name
146− [ bench "Text" $ nf (decodeMap proxyText) val
147− , bench "Identity" $ nf (decodeMap proxyT1) val
148− , bench "Coerce" $ nf (decodeMap proxyT2) val
149− , bench "Parser" $ nf (decodeMap proxyT3) val
150− ]
149+benchDecodeMap name val = bgroup name
150+ [ bench "Text" $ nf (decodeMap proxyText) val
151+ , bench "Identity" $ nf (decodeMap proxyT1) val
152+ , bench "Coerce" $ nf (decodeMap proxyT2) 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'
170+ ]
171+ where
172+ val' :: M.Map T.Text T.Text
173+ val' = M.fromList . HM.toList $ val
151174
152175main :: IO ()
153−main = do
154− defaultMain
155− [ bgroup "decode"
156− [ bgroup "HashMap"
157− [ benchDecodeHM "10" encodedValue10
158− , benchDecodeHM "100" encodedValue100
159− , benchDecodeHM "1000" encodedValue1000
160− , benchDecodeHM "10000" encodedValue10000
161− ]
162− , bgroup "Map"
163− [ benchDecodeMap "10" encodedValue10
164− , benchDecodeMap "100" encodedValue100
165− , benchDecodeMap "1000" encodedValue1000
166− , benchDecodeMap "10000" encodedValue10000
167− ]
176+main = defaultMain
177+ [ bgroup "decode"
178+ [ bgroup "HashMap"
179+ [ benchDecodeHM "10" encodedValue10
180+ , benchDecodeHM "100" encodedValue100
181+ , benchDecodeHM "1000" encodedValue1000
182+ , benchDecodeHM "10000" encodedValue10000
183+ ]
184+ , bgroup "Map"
185+ [ benchDecodeMap "10" encodedValue10
186+ , benchDecodeMap "100" encodedValue100
187+ , benchDecodeMap "1000" encodedValue1000
188+ , benchDecodeMap "10000" encodedValue10000
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
168201 ]
169202 ]
203+ ]