@@ -89,13 +89,15 @@ bUnionOverlap =
8989
9090bUnionEqual :: [Benchmark ]
9191bUnionEqual =
92- [ bgroup " Bytes" [env' s genBytesMap run | s <- defaultSizes] ,
93- bgroup " Int" [env' s genIntMap run | s <- defaultSizes]
92+ [ bgroup' " Bytes" genBytesMap b ,
93+ bgroup' " Int" genIntMap b
9494 ]
9595 where
96- run :: (Hashable a ) => HashMap a Int -> Benchmarkable
97- run = whnf (\ m -> HM. union m m)
96+ b size = bench (show size) . whnf (\ m -> HM. union m m)
9897
98+ -- TODO: For the "overlap" and "equal" cases, it would be interesting to
99+ -- have separate benchmarks both with and without shared subtrees,
100+ -- so we can make use of pointer equality.
99101bDifference :: Benchmark
100102bDifference =
101103 bgroup
@@ -159,29 +161,15 @@ bgroup' ::
159161 (Int -> IOGenM StdGen -> IO env ) ->
160162 (Int -> env -> Benchmark ) ->
161163 Benchmark
162- bgroup' name setup b = bgroup name [env'' setup b s | s <- defaultSizes]
164+ bgroup' name setup b = bgroup name [env' setup b s | s <- defaultSizes]
163165
164166env' ::
165- (NFData a ) =>
166- Int ->
167- (Int -> IOGenM StdGen -> IO a ) ->
168- (a -> Benchmarkable ) ->
169- Benchmark
170- env' size setup run =
171- env
172- ( do
173- gen <- newIOGenM defaultGen
174- setup size gen
175- )
176- (\ x -> bench (show size) (run x))
177-
178- env'' ::
179167 (NFData env ) =>
180168 (Int -> IOGenM StdGen -> IO env ) ->
181169 (Int -> env -> Benchmark ) ->
182170 Int ->
183171 Benchmark
184- env'' setup b size =
172+ env' setup b size =
185173 env
186174 ( do
187175 gen <- newIOGenM defaultGen
0 commit comments