@@ -60,6 +60,7 @@ bFromList =
6060 setupBytes s gen = genNBytes s bytesLength gen
6161 b s = bench (show s) . whnf (HM. fromList . map (,() ))
6262
63+ -- 100 insertions each, so we get more precise timings
6364bInsert :: Benchmark
6465bInsert =
6566 bgroup
@@ -110,25 +111,25 @@ bInsertPresentKeyDifferentValue =
110111 m <- genIntMap size gen
111112 return (m, toKVs m)
112113
113- -- TODO
114114bInsertAbsentKey :: [Benchmark ]
115115bInsertAbsentKey =
116- [ bgroup' " Bytes" genBytesMapsDisjoint b,
117- bgroup' " Int" genIntMapsDisjoint b
116+ [ bgroup' " Bytes" setupBytes b,
117+ bgroup' " Int" setupInts b
118118 ]
119119 where
120- b s = bench (show s) . whnf (\ (as, bs) -> HM. union as bs)
121-
122- {-
123- - [ env m $ \d -> bench (show s) $ whnf (\(k, v, m) -> HM.insert k v m) d ]
124- where m s = do
125- g <- newIOGenM defaultGen
126- let hm = HM.empty
127- forM_ [1..s] $ \v -> do
128- b <- genBytes 32 g
129- HMI.unsafeInsert b v hm
130- return (m, newKeys) -- separate existing, new
131- -}
120+ b s =
121+ bench (show s)
122+ . whnf (\ (m, kvs) -> foldl' (\ () (k, v) -> HM. insert k v m `seq` () ) () kvs)
123+ setupBytes size gen = do
124+ m <- genBytesMap size gen
125+ ks <- genNBytes 200 bytesLength gen
126+ let kvs = take 100 $ Data.List. cycle $ map (,1 ) $ filter (not . flip HM. member m) ks
127+ return (m, kvs)
128+ setupInts size gen = do
129+ m <- genIntMap size gen
130+ ks <- genInts 200 gen
131+ let kvs = take 100 $ Data.List. cycle $ map (,1 ) $ filter (not . flip HM. member m) ks
132+ return (m, kvs)
132133
133134-- TODO: For the "overlap" and "equal" cases, it would be interesting to
134135-- have separate benchmarks both with and without shared subtrees,
0 commit comments