weigh-0.0.0: src/test/Maps.hs
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveGeneric #-}
-- | Example uses of comparing map-like data structures.
module Main where
import Control.DeepSeq
import qualified Data.HashMap.Lazy
import qualified Data.HashMap.Strict
import qualified Data.IntMap.Lazy
import qualified Data.IntMap.Strict
import qualified Data.Map.Lazy
import qualified Data.Map.Strict
import System.Random
import Weigh
-- | Weigh maps.
main :: IO ()
main =
mainWith (do inserts
fromlists)
inserts :: Weigh ()
inserts = do func "Data.Map.Strict.insert mempty"
(\(k,v) -> Data.Map.Strict.insert k v mempty)
(1 :: Int,1 :: Int)
func "Data.Map.Lazy.insert mempty"
(\(k,v) -> Data.Map.Lazy.insert k v mempty)
(1 :: Int,1 :: Int)
func "Data.HashMap.Strict.insert mempty"
(\(k,v) -> Data.HashMap.Strict.insert k v mempty)
(1 :: Int,1 :: Int)
func "Data.HashMap.Lazy.insert mempty"
(\(k,v) -> Data.HashMap.Lazy.insert k v mempty)
(1 :: Int,1 :: Int)
fromlists :: Weigh ()
fromlists =
do let !elems =
force (zip (randoms (mkStdGen 0) :: [Int])
[1 :: Int .. 1000000])
func "Data.Map.Strict.fromList (1 million)" Data.Map.Strict.fromList elems
func "Data.Map.Lazy.fromList (1 million)" Data.Map.Lazy.fromList elems
func "Data.IntMap.Strict.fromList (1 million)" Data.IntMap.Strict.fromList elems
func "Data.IntMap.Lazy.fromList (1 million)" Data.IntMap.Lazy.fromList elems
func "Data.HashMap.Strict.fromList (1 million)" Data.HashMap.Strict.fromList elems
func "Data.HashMap.Lazy.fromList (1 million)" Data.HashMap.Lazy.fromList elems