|
27 | 27 | [ bgroup |
28 | 28 | "HashMap.Strict" |
29 | 29 | [ bFromList, |
| 30 | + bLookup, |
30 | 31 | bInsert, |
31 | 32 | bDelete, |
32 | 33 | bUnion, |
@@ -61,6 +62,53 @@ bFromList = |
61 | 62 | setupBytes s gen = genNBytes s bytesLength gen |
62 | 63 | b s = bench (show s) . whnf (HM.fromList . map (,())) |
63 | 64 |
|
| 65 | +-- 100 lookups each, so we get more precise timings |
| 66 | +bLookup :: Benchmark |
| 67 | +bLookup = |
| 68 | + bgroup |
| 69 | + "lookup" |
| 70 | + [ bgroup "presentKey" bLookupPresentKey, |
| 71 | + bgroup "absentKey" bLookupAbsentKey |
| 72 | + ] |
| 73 | + |
| 74 | +bLookupPresentKey :: [Benchmark] |
| 75 | +bLookupPresentKey = |
| 76 | + [ bgroup'WithSizes sizes "Bytes" setupBytes b, |
| 77 | + bgroup'WithSizes sizes "Int" setupInts b |
| 78 | + ] |
| 79 | + where |
| 80 | + sizes = filter (/= 0) defaultSizes |
| 81 | + b s = |
| 82 | + bench (show s) |
| 83 | + . whnf (\(m, ks) -> foldl' (\() k -> HM.lookup k m `seq` ()) () ks) |
| 84 | + toKs = take 100 . Data.List.cycle . HM.keys |
| 85 | + setupBytes size gen = do |
| 86 | + m <- genBytesMap size gen |
| 87 | + return (m, toKs m) |
| 88 | + setupInts size gen = do |
| 89 | + m <- genIntMap size gen |
| 90 | + return (m, toKs m) |
| 91 | + |
| 92 | +bLookupAbsentKey :: [Benchmark] |
| 93 | +bLookupAbsentKey = |
| 94 | + [ bgroup' "Bytes" setupBytes b, |
| 95 | + bgroup' "Int" setupInts b |
| 96 | + ] |
| 97 | + where |
| 98 | + b s = |
| 99 | + bench (show s) |
| 100 | + . whnf (\(m, ks) -> foldl' (\() k -> HM.lookup k m `seq` ()) () ks) |
| 101 | + setupBytes size gen = do |
| 102 | + m <- genBytesMap size gen |
| 103 | + ks0 <- genNBytes 200 bytesLength gen |
| 104 | + let ks1 = take 100 $ Data.List.cycle $ filter (not . flip HM.member m) ks0 |
| 105 | + return (m, ks1) |
| 106 | + setupInts size gen = do |
| 107 | + m <- genIntMap size gen |
| 108 | + ks0 <- genInts 200 gen |
| 109 | + let ks1 = take 100 $ Data.List.cycle $ filter (not . flip HM.member m) ks0 |
| 110 | + return (m, ks1) |
| 111 | + |
64 | 112 | -- 100 insertions each, so we get more precise timings |
65 | 113 | bInsert :: Benchmark |
66 | 114 | bInsert = |
|
0 commit comments