packages feed

timemap-0.0.7: bench1/Main.hs

{-# LANGUAGE
    OverloadedStrings
  #-}

module Main where


import Prelude hiding (lookup)
import Data.TimeMap (TimeMap)
import qualified Data.TimeMap as TM
import Criterion.Main
import Control.Concurrent.STM
import Control.Concurrent (threadDelay)


type Key = Integer
type Content = Integer

buildTM :: Integer -> IO (TimeMap Key Content)
buildTM top = do
  x <- atomically TM.newTimeMap
  mapM_ (\(k,v) -> TM.insert k v x) $ [0..top] `zip` [0..top]
  return x

lookupTM :: Key -> TimeMap Key Content -> IO [Maybe Content]
lookupTM top x = atomically $ mapM (`TM.lookup` x) [0..top]

destroyTM :: Key -> TimeMap Key Content -> IO ()
destroyTM top x = atomically $ mapM_ (`TM.delete` x) [0..top]


main :: IO ()
main = do
  indiv10 <- buildTM 50
  indiv20 <- buildTM 50
  indiv30 <- buildTM 50
  indiv40 <- buildTM 50
  indiv50 <- buildTM 50

  batch10 <- buildTM 10
  batch20 <- buildTM 20
  batch30 <- buildTM 30
  batch40 <- buildTM 40
  batch50 <- buildTM 50

  threadDelay 1000000

  defaultMain
    [ bgroup "build"
      [ bench "10" $ whnfIO (buildTM 10)
      , bench "20" $ whnfIO (buildTM 20)
      , bench "30" $ whnfIO (buildTM 30)
      , bench "40" $ whnfIO (buildTM 40)
      , bench "50" $ whnfIO (buildTM 50)
      ]
    , bgroup "lookup"
      [ bench "10" $ whnfIO (lookupTM 10 indiv50)
      , bench "20" $ whnfIO (lookupTM 20 indiv50)
      , bench "30" $ whnfIO (lookupTM 30 indiv50)
      , bench "40" $ whnfIO (lookupTM 40 indiv50)
      , bench "50" $ whnfIO (lookupTM 50 indiv50)
      ]
    , bgroup "delete individual"
      [ bench "10" $ whnfIO (destroyTM 10 indiv10)
      , bench "20" $ whnfIO (destroyTM 20 indiv20)
      , bench "30" $ whnfIO (destroyTM 30 indiv30)
      , bench "40" $ whnfIO (destroyTM 40 indiv40)
      , bench "50" $ whnfIO (destroyTM 50 indiv50)
      ]
    , bgroup "delete batch"
      [ bench "10" $ whnfIO (TM.filterFromNow 1 batch10)
      , bench "20" $ whnfIO (TM.filterFromNow 1 batch20)
      , bench "30" $ whnfIO (TM.filterFromNow 1 batch30)
      , bench "40" $ whnfIO (TM.filterFromNow 1 batch40)
      , bench "50" $ whnfIO (TM.filterFromNow 1 batch50)
      ]
    ]