|
| 1 | +module Main where |
| 2 | + |
| 3 | +import Criterion.Main (bench, bgroup, defaultMain, whnf) |
| 4 | + |
| 5 | +import qualified Data.List as L |
| 6 | +import qualified Data.RAList as R |
| 7 | +import qualified Data.RAList.NonEmpty as NER |
| 8 | +import qualified Data.Vector as V |
| 9 | +import qualified Data.Vector.Unboxed as U |
| 10 | + |
| 11 | +list :: [Int] |
| 12 | +list = [1 .. 10000] |
| 13 | + |
| 14 | +ralist :: R.RAList Int |
| 15 | +ralist = R.fromList list |
| 16 | + |
| 17 | +vector :: V.Vector Int |
| 18 | +vector = V.fromList list |
| 19 | + |
| 20 | +uvector :: U.Vector Int |
| 21 | +uvector = U.fromList list |
| 22 | + |
| 23 | +rlast :: R.RAList a -> a |
| 24 | +rlast (R.NonEmpty r) = NER.last r |
| 25 | +rlast R.Empty = error "rlast Empty" |
| 26 | + |
| 27 | +main :: IO () |
| 28 | +main = defaultMain |
| 29 | + [ bgroup "Last" |
| 30 | + [ bench "List" $ whnf L.last list |
| 31 | + , bench "RAList" $ whnf rlast ralist |
| 32 | + , bench "Vector" $ whnf V.last vector |
| 33 | + , bench "Vector.Unboxed" $ whnf U.last uvector |
| 34 | + ] |
| 35 | + , bgroup "Index" |
| 36 | + [ bench "List" $ whnf (\xs -> xs L.!! (L.length xs - 1)) list |
| 37 | + , bench "RAList" $ whnf (\xs -> xs R.! (R.length xs - 1)) ralist |
| 38 | + , bench "Vector" $ whnf (\xs -> xs V.! (V.length xs - 1)) vector |
| 39 | + , bench "Vector.Unboxed" $ whnf (\xs -> xs U.! (U.length xs - 1)) uvector |
| 40 | + ] |
| 41 | + , bgroup "Cons" |
| 42 | + [ bench "List" $ whnf (0 :) list |
| 43 | + , bench "RAList" $ whnf (R.cons 0) ralist |
| 44 | + , bench "Vector" $ whnf (V.cons 0) vector |
| 45 | + , bench "Vector.Unboxed" $ whnf (U.cons 0) uvector |
| 46 | + ] |
| 47 | + , bgroup "Length" |
| 48 | + [ bench "List" $ whnf L.length list |
| 49 | + , bench "RAList" $ whnf R.length ralist |
| 50 | + , bench "Vector" $ whnf V.length vector |
| 51 | + , bench "Vector.Unboxed" $ whnf U.length uvector |
| 52 | + ] |
| 53 | + , bgroup "LastAfterCons" |
| 54 | + [ bench "List" $ whnf (\xs -> L.last $ 0 : xs ) list |
| 55 | + , bench "RAList" $ whnf (\xs -> rlast $ R.cons 0 xs) ralist |
| 56 | + , bench "Vector" $ whnf (\xs -> V.last $ V.cons 0 xs) vector |
| 57 | + , bench "Vector.Unboxed" $ whnf (\xs -> U.last $ U.cons 0 xs) uvector |
| 58 | + ] |
| 59 | + ] |
0 commit comments