22{-# LANGUAGE BangPatterns #-}
33module Main where
44
5- import Control.Applicative (Const (Const , getConst ), pure )
5+ import Control.Applicative (Const (Const , getConst ), liftA2 , pure )
66import Control.DeepSeq (rnf )
77import Control.Exception (evaluate )
88import Test.Tasty.Bench (bench , bgroup , defaultMain , whnf , nf )
@@ -31,12 +31,16 @@ main = do
3131 let m = M. fromList elems :: M. Map Int Int
3232 m_even = M. fromList elems_even :: M. Map Int Int
3333 m_odd = M. fromList elems_odd :: M. Map Int Int
34+ m_uncurried = M. fromList elems_uncurried :: M. Map (Int , Int ) Int
35+ m_curried = M. curry m_uncurried :: M. Map Int (M. Map Int Int )
3436 s_random = Set. fromList keys_random :: Set. Set Int
3537 evaluate $ rnf [m, m_even, m_odd]
3638 evaluate $ rnf [s_random]
3739 evaluate $ rnf
3840 [elems_distinct_asc, elems_distinct_desc, elems_asc, elems_desc]
3941 evaluate $ rnf [keys_random]
42+ evaluate $ rnf [m_uncurried]
43+ evaluate $ rnf [m_curried]
4044 defaultMain
4145 [ bench " lookup absent" $ whnf (lookup evens) m_odd
4246 , bench " lookup present" $ whnf (lookup evens) m_even
@@ -143,6 +147,8 @@ main = do
143147 , bench " Strict.fromSetA outer" $ whnf (MS. fromSetA (MkSolo . pred )) s_random
144148 , bench " Lazy.fromSetA inner" $ whnf (getSolo . M. fromSetA (MkSolo . pred )) s_random
145149 , bench " Strict.fromSetA inner" $ whnf (getSolo . MS. fromSetA (MkSolo . pred )) s_random
150+ , bench " curry" $ whnf M. curry m_uncurried
151+ , bench " uncurry" $ whnf M. uncurry m_curried
146152 , 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 ])
147153 , bench " eq" $ whnf (\ m' -> m' == m') m -- worst case, compares everything
148154 , bench " compare" $ whnf (\ m' -> compare m' m') m -- worst case, compares everything
@@ -155,7 +161,8 @@ main = do
155161 , bench " mapKeysWith:desc" $ whnf (M. mapKeysWith (+) (negate . (`div` 2 ))) m
156162 ]
157163 where
158- bound = 2 ^ 14
164+ magnitude = 14
165+ bound = 2 ^ magnitude
159166 elems = shuffle elems_distinct_asc
160167 elems_even = zip evens evens
161168 elems_odd = zip odds odds
@@ -172,6 +179,11 @@ main = do
172179 sumkv k v1 v2 = k + v1 + v2
173180 consPair k v xs = (k, v) : xs
174181 keys_random = take bound (randoms gen)
182+ elems_uncurried = zip xs evens
183+ where
184+ left = magnitude `div` 2
185+ right = magnitude - left
186+ xs = shuffle $ liftA2 (,) [1 .. 2 ^ left] $ reverse [1 .. 2 ^ right]
175187
176188add3 :: Int -> Int -> Int -> Int
177189add3 x y z = x + y + z
0 commit comments