@@ -17,13 +17,15 @@ import Data.Coerce
17
17
import Prelude hiding (lookup )
18
18
19
19
import Utils.Fold (foldBenchmarks , foldWithKeyBenchmarks )
20
+ import Utils.Random (shuffle )
20
21
21
22
main = 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
25
26
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]
27
29
defaultMain
28
30
[ bench " lookup absent" $ whnf (lookup evens) m_odd
29
31
, bench " lookup present" $ whnf (lookup evens) m_even
@@ -80,7 +82,7 @@ main = do
80
82
, bench " updateLookupWithKey delete" $ whnf (upd' (const Nothing ) evens) m
81
83
, bench " mapMaybe" $ whnf (M. mapMaybe maybeDel) m
82
84
, bench " mapMaybeWithKey" $ whnf (M. mapMaybeWithKey (const maybeDel)) m
83
- , bench " lookupIndex" $ whnf (lookupIndex keys ) m
85
+ , bench " lookupIndex" $ whnf (lookupIndex keys_distinct_asc ) m
84
86
, bench " union" $ whnf (M. union m_even) m_odd
85
87
, bench " difference" $ whnf (M. difference m) m_even
86
88
, bench " intersection" $ whnf (M. intersection m) m_even
@@ -93,9 +95,9 @@ main = do
93
95
, bench " fromDescList" $ whnf M. fromDescList elems_desc
94
96
, bench " fromDescListWithKey" $
95
97
whnf (M. fromDescListWithKey sumkv) elems_desc
96
- , bench " fromDistinctAscList" $ whnf M. fromDistinctAscList elems
98
+ , bench " fromDistinctAscList" $ whnf M. fromDistinctAscList elems_distinct_asc
97
99
, 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
99
101
, bench " fromDistinctDescList:fusion" $ whnf (\ n -> M. fromDistinctDescList [(i,i) | i <- [n,n- 1 .. 1 ]]) bound
100
102
, 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 ])
101
103
, bench " eq" $ whnf (\ m' -> m' == m') m -- worst case, compares everything
@@ -106,17 +108,18 @@ main = do
106
108
]
107
109
where
108
110
bound = 2 ^ 12
109
- elems = zip keys values
111
+ elems = shuffle elems_distinct_asc
110
112
elems_even = zip evens evens
111
113
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
113
116
keys_asc = map (`div` 2 ) [1 .. bound] -- [0,1,1,2,2..]
114
117
elems_asc = zip keys_asc values
115
118
keys_desc = map (`div` 2 ) [bound,bound- 1 .. 1 ] -- [..2,2,1,1,0]
116
119
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]
120
123
values = [1 .. bound]
121
124
sumkv k v1 v2 = k + v1 + v2
122
125
consPair k v xs = (k, v) : xs
0 commit comments