packages feed

rrb-vector-0.1.0.0: bench/Main.hs

import Data.Functor ((<&>))

import Gauge.Main

import qualified Data.RRBVector as RRB

main :: IO ()
main = defaultMain $ [10, 100, 1_000, 10_000, 100_000] <&> \n ->
    let v = RRB.fromList [1..n]
        idx = [n `div` 10, n `div` 2, n - n `div` 10]
    in bgroup (show n)
    [ bench "fromList" $ nf RRB.fromList [1..n]
    , bench "><" $ nf (\vec -> vec RRB.>< vec) v
    , bench "|>" $ nf (RRB.|> 42) v
    , bench "<|" $ nf (42 RRB.<|) v
    , bgroup "take" $ idx <&> \i -> bench (show i) $ nf (RRB.take i) v
    , bgroup "drop" $ idx <&> \i -> bench (show i) $ nf (RRB.drop i) v
    , bgroup "lookup" $ idx <&> \i -> bench (show i) $ nf (RRB.lookup i) v
    , bgroup "adjust" $ idx <&> \i -> bench (show i) $ nf (RRB.adjust i (+ 1)) v
    , bench "foldl" $ nf (foldl (+) 0) v
    , bench "foldr" $ nf (foldr (+) 0) v
    ]