on main help sign in
Evalute bigMap in benchmarks
commite85ad06ed9bd39772964d849b54c782fef37fccd authorvrom911 <vrom911@gmail.com> dateSat 16 Dec 2017, 19:53 (9 years ago) parentf517f30
3 files changed+12−1
benchmark/Main.hs+7−1 src/Data/TypeRep/Map.hs+4 typerep-map.cabal+1
benchmark/Main.hs+7−1
@@ -5,14 +5,17 @@ import Criterion.Main (bench, defaultMain, whnf)
55
66import Prelude hiding (lookup)
77
8+import Control.DeepSeq (rnf)
9+import Control.Exception.Base (evaluate)
810import Data.Proxy (Proxy (..))
911import Data.Typeable (Typeable)
1012
11−import Data.TypeRep.Map (TypeRepMap, empty, insert, lookup, size)
13+import Data.TypeRep.Map (TypeRepMap (..), empty, insert, keys, lookup, size)
1214
1315main :: IO ()
1416main = do
1517 putStrLn $ "size: " ++ (show $ size bigMap)
18+ evaluate $ rknf bigMap
1619 defaultMain
1720 [ bench "lookup" $ whnf (lookup :: TypeRepMap -> Maybe Char) bigMap
1821 , bench "insert new" $ whnf (\x -> insert x bigMap) (111 :: Int)
@@ -29,3 +32,6 @@ data S a
2932buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
3033buildBigMap 1 x = insert 'a' . insert x
3134buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
35+
36+rknf :: TypeRepMap -> ()
37+rknf = rnf . keys
src/Data/TypeRep/Map.hs+4
@@ -5,6 +5,7 @@ module Data.TypeRep.Map
55 ( TypeRepMap (..)
66 , empty
77 , insert
8+ , keys
89 , lookup
910 , size
1011 ) where
@@ -42,3 +43,6 @@ lookup = fmap unsafeCoerce . LMap.lookup (typeRep (Proxy :: Proxy a)) . unMap
4243
4344size :: TypeRepMap -> Int
4445size = LMap.size . unMap
46+
47+keys :: TypeRepMap -> [TypeRep]
48+keys = LMap.keys . unMap
typerep-map.cabal+1
@@ -44,6 +44,7 @@ benchmark typerep-map-benchmark
4444 build-depends: base
4545 , criterion
4646 , typerep-map
47+ , deepseq
4748
4849source-repository head
4950 type: git