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
]