packages feed

timemap-0.0.0: bench/Bench2.hs

{-# LANGUAGE
    OverloadedStrings
  #-}

module Main where


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


type Key = Integer
type Content = Integer

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

destroyTM :: [Integer] -> TimeMap Key Content -> IO ()
destroyTM ds x = mapM_ (`TM.delete` x) ds


main :: IO ()
main = do
  x10 <- buildTM 1000
  x20 <- buildTM 2000
  x30 <- buildTM 3000
  x40 <- buildTM 4000
  x50 <- buildTM 5000

  threadDelay 500000

  fresh  <- buildTM 5000

  destroyTM [0..1000]    fresh
  destroyTM [1001..2000] fresh
  destroyTM [2001..3000] fresh
  destroyTM [3001..4000] fresh
  destroyTM [4001..5000] fresh

  threadDelay 1000000

  TM.filterFromNow 1 x10
  TM.filterFromNow 1 x20
  TM.filterFromNow 1 x30
  TM.filterFromNow 1 x40
  TM.filterFromNow 1 x50