@@ -17,13 +17,15 @@ import Data.Coerce
1717import Prelude hiding (lookup )
1818
1919import Utils.Fold (foldBenchmarks , foldWithKeyBenchmarks )
20+ import Utils.Random (shuffle )
2021
2122main = do
22- let m = M. fromAscList elems :: M. Map Int Int
23- m_even = M. fromAscList elems_even :: M. Map Int Int
24- m_odd = M. fromAscList elems_odd :: M. Map Int Int
23+ let m = M. fromList elems :: M. Map Int Int
24+ m_even = M. fromList elems_even :: M. Map Int Int
25+ m_odd = M. fromList elems_odd :: M. Map Int Int
2526 evaluate $ rnf [m, m_even, m_odd]
26- evaluate $ rnf [elems_rev, elems_asc, elems_desc]
27+ evaluate $ rnf
28+ [elems_distinct_asc, elems_distinct_desc, elems_asc, elems_desc]
2729 defaultMain
2830 [ bench " lookup absent" $ whnf (lookup evens) m_odd
2931 , bench " lookup present" $ whnf (lookup evens) m_even
@@ -80,7 +82,7 @@ main = do
8082 , bench " updateLookupWithKey delete" $ whnf (upd' (const Nothing ) evens) m
8183 , bench " mapMaybe" $ whnf (M. mapMaybe maybeDel) m
8284 , bench " mapMaybeWithKey" $ whnf (M. mapMaybeWithKey (const maybeDel)) m
83- , bench " lookupIndex" $ whnf (lookupIndex keys ) m
85+ , bench " lookupIndex" $ whnf (lookupIndex keys_distinct_asc ) m
8486 , bench " union" $ whnf (M. union m_even) m_odd
8587 , bench " difference" $ whnf (M. difference m) m_even
8688 , bench " intersection" $ whnf (M. intersection m) m_even
@@ -93,9 +95,9 @@ main = do
9395 , bench " fromDescList" $ whnf M. fromDescList elems_desc
9496 , bench " fromDescListWithKey" $
9597 whnf (M. fromDescListWithKey sumkv) elems_desc
96- , bench " fromDistinctAscList" $ whnf M. fromDistinctAscList elems
98+ , bench " fromDistinctAscList" $ whnf M. fromDistinctAscList elems_distinct_asc
9799 , bench " fromDistinctAscList:fusion" $ whnf (\ n -> M. fromDistinctAscList [(i,i) | i <- [1 .. n]]) bound
98- , bench " fromDistinctDescList" $ whnf M. fromDistinctDescList elems_rev
100+ , bench " fromDistinctDescList" $ whnf M. fromDistinctDescList elems_distinct_desc
99101 , bench " fromDistinctDescList:fusion" $ whnf (\ n -> M. fromDistinctDescList [(i,i) | i <- [n,n- 1 .. 1 ]]) bound
100102 , bench " minView" $ whnf (\ m' -> case M. minViewWithKey m' of {Nothing -> 0 ; Just ((k,v),m'') -> k+ v+ M. size m''}) (M. fromAscList $ zip [1 .. 10 :: Int ] [100 .. 110 :: Int ])
101103 , bench " eq" $ whnf (\ m' -> m' == m') m -- worst case, compares everything
@@ -106,17 +108,18 @@ main = do
106108 ]
107109 where
108110 bound = 2 ^ 12
109- elems = zip keys values
111+ elems = shuffle elems_distinct_asc
110112 elems_even = zip evens evens
111113 elems_odd = zip odds odds
112- elems_rev = reverse elems
114+ elems_distinct_asc = zip keys_distinct_asc values
115+ elems_distinct_desc = reverse elems_distinct_asc
113116 keys_asc = map (`div` 2 ) [1 .. bound] -- [0,1,1,2,2..]
114117 elems_asc = zip keys_asc values
115118 keys_desc = map (`div` 2 ) [bound,bound- 1 .. 1 ] -- [..2,2,1,1,0]
116119 elems_desc = zip keys_desc values
117- keys = [1 .. bound]
118- evens = [2 ,4 .. bound]
119- odds = [1 ,3 .. bound]
120+ keys_distinct_asc = [1 .. bound]
121+ evens = shuffle [2 ,4 .. bound]
122+ odds = shuffle [1 ,3 .. bound]
120123 values = [1 .. bound]
121124 sumkv k v1 v2 = k + v1 + v2
122125 consPair k v xs = (k, v) : xs
0 commit comments