Skip to content

Commit bacac24

Browse files
committed
WIP
1 parent 434cab1 commit bacac24

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

benchmarks/FineGrained.hs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ main =
2828
"HashMap.Strict"
2929
[ bFromList,
3030
bInsert,
31+
bDelete,
3132
bUnion,
3233
bDifference
3334
],
@@ -129,6 +130,38 @@ bInsertAbsentKey =
129130
let kvs = take 100 $ Data.List.cycle $ map (,1) $ filter (not . flip HM.member m) ks
130131
return (m, kvs)
131132

133+
-- 100 deletions each, so we get more precise timings
134+
bDelete :: Benchmark
135+
bDelete =
136+
bgroup
137+
"delete"
138+
[ bgroup "presentKey" bDeletePresentKey,
139+
bgroup "absentKey" bDeleteAbsentKey
140+
]
141+
142+
bDeletePresentKey :: [Benchmark]
143+
bDeletePresentKey = []
144+
145+
bDeleteAbsentKey :: [Benchmark]
146+
bDeleteAbsentKey =
147+
[ bgroup' "Bytes" setupBytes b,
148+
bgroup' "Int" setupInts b
149+
]
150+
where
151+
b s =
152+
bench (show s)
153+
. whnf (\(m, ks) -> foldl' (\() k -> HM.delete k m `seq` ()) () ks)
154+
setupBytes size gen = do
155+
m <- genBytesMap size gen
156+
ks0 <- genNBytes 200 bytesLength gen
157+
let ks1 = take 100 $ Data.List.cycle $ filter (not . flip HM.member m) ks0
158+
return (m, ks1)
159+
setupInts size gen = do
160+
m <- genIntMap size gen
161+
ks0 <- genInts 200 gen
162+
let ks1 = take 100 $ Data.List.cycle $ filter (not . flip HM.member m) ks0
163+
return (m, ks1)
164+
132165
-- TODO: For the "overlap" and "equal" cases, it would be interesting to
133166
-- have separate benchmarks both with and without shared subtrees,
134167
-- so we can make use of pointer equality.

0 commit comments

Comments
 (0)