packages feed

sorted-list-0.3.1.0: bench/map.hs

module Main (main) where

import Data.SortedList (SortedList)
import qualified Data.SortedList as SL
import Criterion.Main (defaultMain, bench, nf)

list :: SortedList Int
list = SL.take 100 $ SL.iterate (+1) 1

-- | Monotonically increasing function.
incf :: Int -> Int
incf x = 2 * x

-- | Monotonically decreasing function.
decf :: Int -> Int
decf x = (-2) * x

main :: IO ()
main = defaultMain
  [ bench "increasing/map"    $ nf (SL.map    incf) list
  , bench "increasing/mapDec" $ nf (SL.mapDec incf) list
  , bench "decreasing/map"    $ nf (SL.map    decf) list
  , bench "decreasing/mapDec" $ nf (SL.mapDec decf) list
  , bench "insert"            $ nf (SL.insert 60) list
  , bench "liftA2"            $ nf (\xs -> SL.liftA2 (+) xs xs) list
    ]