@@ -82,6 +82,22 @@ bUnion =
8282 bgroup " equal" bUnionEqual
8383 ]
8484
85+ bUnionDisjoint :: [Benchmark ]
86+ bUnionDisjoint =
87+ [ bgroup " Bytes" [env' s setupBytes run | s <- defaultSizes],
88+ bgroup " Int" [env' s setupInts run | s <- defaultSizes]
89+ ]
90+ where
91+ run :: (Hashable a ) => (HashMap a Int , HashMap a Int ) -> Benchmarkable
92+ run = whnf (\ (as, bs) -> HM. union as bs)
93+ setupBytes s gen = do
94+ (trues, falses) <- Key.Bytes. genDisjoint s bytesLength gen
95+ return (toMap trues, toMap falses)
96+ setupInts s gen = do
97+ ints <- genInts s gen
98+ let (trues, falses) = Data.List. partition (flip testBit (31 :: Int )) ints
99+ return (toMap trues, toMap falses)
100+
85101bUnionEqual :: [Benchmark ]
86102bUnionEqual =
87103 [ bgroup " Bytes" [env (bytesEnv s) (bench' s) | s <- defaultSizes],
@@ -98,23 +114,6 @@ bUnionEqual =
98114 ks <- genInts s g
99115 return (toMap ks)
100116
101- bUnionDisjoint :: [Benchmark ]
102- bUnionDisjoint =
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 tup = bench (show s) $ whnf (\ (as, bs) -> HM. union as bs) tup
108- bytesEnv s = do
109- g <- newIOGenM defaultGen
110- (trues, falses) <- Key.Bytes. genDisjoint s bytesLength g
111- return (HM. fromList (map (,() ) trues), HM. fromList (map (,() ) falses))
112- intsEnv s = do
113- g <- newIOGenM defaultGen
114- ints <- genInts s g
115- let (trues, falses) = Data.List. partition (flip testBit (31 :: Int )) ints
116- return (HM. fromList (map (,() ) trues), HM. fromList (map (,() ) falses))
117-
118117-- TODO: Separate benchmarks for overlap with pointer eq?!
119118bUnionOverlap :: [Benchmark ]
120119bUnionOverlap =
0 commit comments