@@ -98,70 +98,58 @@ bUnionDisjoint =
9898 let (trues, falses) = Data.List. partition (flip testBit (31 :: Int )) ints
9999 return (keysToMap trues, keysToMap falses)
100100
101- bUnionEqual :: [Benchmark ]
102- bUnionEqual =
103- [ bgroup " Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
104- bgroup " Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
105- ]
106- where
107- bench' s = bench (show s) . whnf (\ m -> HM. union m m)
108- bytesEnv s = do
109- g <- newIOGenM defaultGen
110- ks <- Key.Bytes. genNBytes s bytesLength g
111- return (keysToMap ks)
112- intsEnv s = do
113- g <- newIOGenM defaultGen
114- ks <- genInts s g
115- return (keysToMap ks)
116-
117101-- TODO: Separate benchmarks for overlap with pointer eq?!
118102bUnionOverlap :: [Benchmark ]
119103bUnionOverlap =
120- [ bgroup " Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
121- bgroup " Int" [env (intsEnv s) (bench' s) | s <- defaultSizes]
104+ [ bgroup " Bytes" [env' s setupBytes run | s <- defaultSizes],
105+ bgroup " Int" [env' s setupInts run | s <- defaultSizes]
122106 ]
123107 where
124- bench' s tup = bench ( show s) $ whnf ( \ (as, bs ) -> HM. union as bs) tup
125- bytesEnv s = do
126- g <- newIOGenM defaultGen
127- (trues, falses) <- Key.Bytes. genDisjoint s bytesLength g
108+ run :: ( Hashable a ) => ( HashMap a Int , HashMap a Int ) -> Benchmarkable
109+ run = whnf ( \ (as, bs) -> HM. union as bs)
110+ setupBytes s gen = do
111+ (trues, falses) <- Key.Bytes. genDisjoint s bytesLength gen
128112 let (a_sep, b_sep) = splitAt (s `div` 4 ) trues
129113 return
130114 ( keysToMap falses `HM.union` keysToMap a_sep,
131115 keysToMap falses `HM.union` keysToMap b_sep
132116 )
133- intsEnv s = do
134- g <- newIOGenM defaultGen
117+ setupInts s gen = do
135118 let s_overlap = s `div` 2
136119 let s_a_sep = (s - s_overlap) `div` 2
137120 let s_b_sep = s - s_overlap - s_a_sep
138- overlap <- genInts s_overlap g
139- a_sep <- genInts s_a_sep g
140- b_sep <- genInts s_b_sep g
121+ overlap <- genInts s_overlap gen
122+ a_sep <- genInts s_a_sep gen
123+ b_sep <- genInts s_b_sep gen
141124 return
142125 ( keysToMap overlap `HM.union` keysToMap a_sep,
143126 keysToMap overlap `HM.union` keysToMap b_sep
144127 )
145128
146- keysToMap :: (Hashable k ) => [k ] -> HashMap k Int
147- keysToMap = HM. fromList . map (,1 )
148-
149- genInts ::
150- (StatefulGen g m ) =>
151- Int ->
152- g ->
153- m [Int ]
154- genInts n = do
155- replicateM n . uniformM
129+ bUnionEqual :: [Benchmark ]
130+ bUnionEqual =
131+ [ bgroup " Bytes" [env' s setupBytes run | s <- defaultSizes],
132+ bgroup " Int" [env' s setupInts run | s <- defaultSizes]
133+ ]
134+ where
135+ run :: (Hashable a ) => HashMap a Int -> Benchmarkable
136+ run = whnf (\ m -> HM. union m m)
137+ setupBytes s gen = do
138+ ks <- Key.Bytes. genNBytes s bytesLength gen
139+ return (keysToMap ks)
140+ setupInts s gen = do
141+ ks <- genInts s gen
142+ return (keysToMap ks)
156143
157144bSetFromList :: Benchmark
158145bSetFromList =
159146 bgroup
160147 " fromList"
161- [ bgroup " Bytes" (b bytesEnv) ,
162- bgroup " Int" (b intsEnv)
148+ [ bg " Bytes" bytesEnv,
149+ bg " Int" intsEnv
163150 ]
164151 where
152+ bg name e = bgroup name (b e)
165153 b e = [env (e s) (bench' s) | s <- defaultSizes]
166154 bench' s = bench (show s) . whnf Data.HashSet. fromList
167155 bytesEnv s = do
@@ -171,6 +159,16 @@ bSetFromList =
171159 g <- newIOGenM defaultGen
172160 genInts s g
173161
162+ keysToMap :: (Hashable k ) => [k ] -> HashMap k Int
163+ keysToMap = HM. fromList . map (,1 )
164+
165+ genInts ::
166+ (StatefulGen g m ) =>
167+ Int ->
168+ g ->
169+ m [Int ]
170+ genInts n = replicateM n . uniformM
171+
174172{-
175173bFromList = matrix defaultSizes e' b'
176174 where
0 commit comments