Skip to content

Commit 476ef08

Browse files
committed
WIP
1 parent 69c2cb3 commit 476ef08

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

benchmarks/FineGrained.hs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ module Main where
99

1010
import Control.Monad (replicateM)
1111
import Data.Bits (testBit)
12+
import Data.HashMap.Strict (HashMap)
1213
import qualified Data.HashMap.Strict as HM
14+
import Data.Hashable
1315
import Data.List
1416
import Key.Bytes
1517
import System.Random.Stateful
@@ -66,7 +68,26 @@ bUnion :: Benchmark
6668
bUnion =
6769
bgroup
6870
"union"
69-
[bgroup "disjoint" bUnionDisjoint, bgroup "overlap" bUnionOverlap, bgroup "same" []]
71+
[ bgroup "disjoint" bUnionDisjoint,
72+
bgroup "overlap" bUnionOverlap,
73+
bgroup "equal" bUnionEqual
74+
]
75+
76+
bUnionEqual :: [Benchmark]
77+
bUnionEqual =
78+
[ bgroup "Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
79+
bgroup "Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
80+
]
81+
where
82+
bench' s = bench (show s) . whnf (\m -> HM.union m m)
83+
bytesEnv s = do
84+
g <- newIOGenM defaultGen
85+
ks <- Key.Bytes.genNBytes s bytesLength g
86+
return (toMap ks)
87+
intsEnv s = do
88+
g <- newIOGenM defaultGen
89+
ks <- genInts s g
90+
return (toMap ks)
7091

7192
bUnionDisjoint :: [Benchmark]
7293
bUnionDisjoint =
@@ -88,14 +109,16 @@ bUnionDisjoint =
88109
-- TODO: Separate benchmarks for overlap with pointer eq?!
89110
bUnionOverlap :: [Benchmark]
90111
bUnionOverlap =
91-
[ -- bgroup "Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
112+
[ bgroup "Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
92113
bgroup "Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
93114
]
94115
where
95116
bench' s tup = bench (show s) $ whnf (\(as, bs) -> HM.union as bs) tup
96117
bytesEnv s = do
97118
g <- newIOGenM defaultGen
98-
undefined
119+
(trues, falses) <- Key.Bytes.genDisjoint s bytesLength g
120+
let (a_sep, b_sep) = splitAt (s `div` 4) trues
121+
return (toMap falses `HM.union` toMap a_sep, toMap falses `HM.union` toMap b_sep)
99122
intsEnv s = do
100123
g <- newIOGenM defaultGen
101124
let s_overlap = s `div` 2
@@ -104,9 +127,11 @@ bUnionOverlap =
104127
overlap <- genInts s_overlap g
105128
a_sep <- genInts s_a_sep g
106129
b_sep <- genInts s_b_sep g
107-
let toMap = HM.fromList . map (,())
108130
return (toMap overlap `HM.union` toMap a_sep, toMap overlap `HM.union` toMap b_sep)
109131

132+
toMap :: (Hashable k) => [k] -> HashMap k Int
133+
toMap = HM.fromList . map (,1)
134+
110135
genInts ::
111136
(StatefulGen g m) =>
112137
Int ->

0 commit comments

Comments
 (0)