ral-0.1: bench/Bench.hs
module Main where
import Criterion.Main (bench, bgroup, defaultMain, whnf)
import qualified Data.List as L
import qualified Data.RAList as R
import qualified Data.RAList.NonEmpty as NER
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
list :: [Int]
list = [1 .. 10000]
ralist :: R.RAList Int
ralist = R.fromList list
vector :: V.Vector Int
vector = V.fromList list
uvector :: U.Vector Int
uvector = U.fromList list
rlast :: R.RAList a -> a
rlast (R.NonEmpty r) = NER.last r
rlast R.Empty = error "rlast Empty"
main :: IO ()
main = defaultMain
[ bgroup "Last"
[ bench "List" $ whnf L.last list
, bench "RAList" $ whnf rlast ralist
, bench "Vector" $ whnf V.last vector
, bench "Vector.Unboxed" $ whnf U.last uvector
]
, bgroup "Index"
[ bench "List" $ whnf (\xs -> xs L.!! (L.length xs - 1)) list
, bench "RAList" $ whnf (\xs -> xs R.! (R.length xs - 1)) ralist
, bench "Vector" $ whnf (\xs -> xs V.! (V.length xs - 1)) vector
, bench "Vector.Unboxed" $ whnf (\xs -> xs U.! (U.length xs - 1)) uvector
]
, bgroup "Cons"
[ bench "List" $ whnf (0 :) list
, bench "RAList" $ whnf (R.cons 0) ralist
, bench "Vector" $ whnf (V.cons 0) vector
, bench "Vector.Unboxed" $ whnf (U.cons 0) uvector
]
, bgroup "Length"
[ bench "List" $ whnf L.length list
, bench "RAList" $ whnf R.length ralist
, bench "Vector" $ whnf V.length vector
, bench "Vector.Unboxed" $ whnf U.length uvector
]
, bgroup "LastAfterCons"
[ bench "List" $ whnf (\xs -> L.last $ 0 : xs ) list
, bench "RAList" $ whnf (\xs -> rlast $ R.cons 0 xs) ralist
, bench "Vector" $ whnf (\xs -> V.last $ V.cons 0 xs) vector
, bench "Vector.Unboxed" $ whnf (\xs -> U.last $ U.cons 0 xs) uvector
]
]