Skip to content

Commit de83942

Browse files
committed
Move comparison benchmarks for containers and hashmap behind CPP
Note that configuring cpp-options in the cabal.project is currently unsupported: haskell/cabal#7872 Closes #333.
1 parent c481228 commit de83942

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

benchmarks/Benchmarks.hs

+23-10
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ main :: IO ()
121121
main = do
122122
defaultMain
123123
[
124+
#ifdef BENCH_containers_Map
124125
env setupEnv $ \ ~(Env{..}) ->
125126
-- * Comparison to other data structures
126127
-- ** Map
@@ -161,10 +162,12 @@ main = do
161162
[ bench "String" $ whnf (M.isSubmapOf mSubset) m
162163
, bench "ByteString" $ whnf (M.isSubmapOf mbsSubset) mbs
163164
]
164-
]
165+
],
166+
#endif
165167

168+
#ifdef BENCH_hashmap_Map
166169
-- ** Map from the hashmap package
167-
, env setupEnv $ \ ~(Env{..}) ->
170+
env setupEnv $ \ ~(Env{..}) ->
168171
bgroup "hashmap/Map"
169172
[ bgroup "lookup"
170173
[ bench "String" $ whnf (lookupIHM keys) ihm
@@ -202,14 +205,12 @@ main = do
202205
[ bench "String" $ whnf (IHM.isSubmapOf ihmSubset) ihm
203206
, bench "ByteString" $ whnf (IHM.isSubmapOf ihmbsSubset) ihmbs
204207
]
205-
, bgroup "hash"
206-
[ bench "String" $ whnf hash hm
207-
, bench "ByteString" $ whnf hash hmbs
208-
]
209-
]
208+
],
209+
#endif
210210

211+
#ifdef BENCH_containers_IntMap
211212
-- ** IntMap
212-
, env setupEnv $ \ ~(Env{..}) ->
213+
env setupEnv $ \ ~(Env{..}) ->
213214
bgroup "IntMap"
214215
[ bench "lookup" $ whnf (lookupIM keysI) im
215216
, bench "lookup-miss" $ whnf (lookupIM keysI') im
@@ -220,9 +221,10 @@ main = do
220221
, bench "size" $ whnf IM.size im
221222
, bench "fromList" $ whnf IM.fromList elemsI
222223
, bench "isSubmapOf" $ whnf (IM.isSubmapOf imSubset) im
223-
]
224+
],
225+
#endif
224226

225-
, env setupEnv $ \ ~(Env{..}) ->
227+
env setupEnv $ \ ~(Env{..}) ->
226228
bgroup "HashMap"
227229
[ -- * Basic interface
228230
bgroup "lookup"
@@ -357,6 +359,11 @@ main = do
357359
, bench "Int" $ whnf (HM.fromListWith (+)) elemsDupI
358360
]
359361
]
362+
-- Hashable instance
363+
, bgroup "hash"
364+
[ bench "String" $ whnf hash hm
365+
, bench "ByteString" $ whnf hash hmbs
366+
]
360367
]
361368
]
362369

@@ -438,6 +445,7 @@ isSubmapOfNaive m1 m2 = and [ Just v1 == HM.lookup k1 m2 | (k1,v1) <- HM.toList
438445
{-# SPECIALIZE isSubmapOfNaive :: HM.HashMap String Int -> HM.HashMap String Int -> Bool #-}
439446
{-# SPECIALIZE isSubmapOfNaive :: HM.HashMap BS.ByteString Int -> HM.HashMap BS.ByteString Int -> Bool #-}
440447

448+
#ifdef BENCH_containers_Map
441449
------------------------------------------------------------------------
442450
-- * Map
443451

@@ -458,7 +466,9 @@ deleteM xs m0 = foldl' (\m k -> M.delete k m) m0 xs
458466
{-# SPECIALIZE deleteM :: [String] -> M.Map String Int -> M.Map String Int #-}
459467
{-# SPECIALIZE deleteM :: [BS.ByteString] -> M.Map BS.ByteString Int
460468
-> M.Map BS.ByteString Int #-}
469+
#endif
461470

471+
#ifdef BENCH_hashmap_Map
462472
------------------------------------------------------------------------
463473
-- * Map from the hashmap package
464474

@@ -482,7 +492,9 @@ deleteIHM xs m0 = foldl' (\m k -> IHM.delete k m) m0 xs
482492
-> IHM.Map String Int #-}
483493
{-# SPECIALIZE deleteIHM :: [BS.ByteString] -> IHM.Map BS.ByteString Int
484494
-> IHM.Map BS.ByteString Int #-}
495+
#endif
485496

497+
#ifdef BENCH_containers_IntMap
486498
------------------------------------------------------------------------
487499
-- * IntMap
488500

@@ -494,3 +506,4 @@ insertIM xs m0 = foldl' (\m (k, v) -> IM.insert k v m) m0 xs
494506

495507
deleteIM :: [Int] -> IM.IntMap Int -> IM.IntMap Int
496508
deleteIM xs m0 = foldl' (\m k -> IM.delete k m) m0 xs
509+
#endif

unordered-containers.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ benchmark benchmarks
214214
ghc-options: -Wall -O2 -rtsopts -with-rtsopts=-A32m
215215
if impl(ghc >= 8.10)
216216
ghc-options: "-with-rtsopts=-A32m --nonmoving-gc"
217+
-- cpp-options: -DBENCH_containers_Map -DBENCH_containers_IntMap -DBENCH_hashmap_Map
217218

218219
source-repository head
219220
type: git

0 commit comments

Comments
 (0)