on main help sign in
Add benchmarks for TypeRepMap
commitf517f30e91b49aa4064df4c0e8a4a56053b60ba6 authorvrom911 <vrom911@gmail.com> dateSat 16 Dec 2017, 18:57 (9 years ago) parent54feff4
1 file changed+29−2
benchmark/Main.hs+29−2
benchmark/Main.hs+29−2
@@ -1,4 +1,31 @@
1−import Criterion.Main
1+{-# LANGUAGE ExplicitForAll #-}
2+{-# LANGUAGE ScopedTypeVariables #-}
3+
4+import Criterion.Main (bench, defaultMain, whnf)
5+
6+import Prelude hiding (lookup)
7+
8+import Data.Proxy (Proxy (..))
9+import Data.Typeable (Typeable)
10+
11+import Data.TypeRep.Map (TypeRepMap, empty, insert, lookup, size)
212
313main :: IO ()
4−main = defaultMain [bench "const" (whnf const ())]
14+main = do
15+ putStrLn $ "size: " ++ (show $ size bigMap)
16+ defaultMain
17+ [ bench "lookup" $ whnf (lookup :: TypeRepMap -> Maybe Char) bigMap
18+ , bench "insert new" $ whnf (\x -> insert x bigMap) (111 :: Int)
19+ , bench "update old" $ whnf (\x -> insert x bigMap) 'b'
20+ ]
21+
22+-- TypeRepMap of 10000 elements
23+bigMap :: TypeRepMap
24+bigMap = buildBigMap 10000 (Proxy :: Proxy Z) empty
25+
26+data Z
27+data S a
28+
29+buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
30+buildBigMap 1 x = insert 'a' . insert x
31+buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))