on bd5b6fc help sign in
57 lines 1.8 kB history raw
1{-# LANGUAGE CPP #-}
3#include "Streamly/Benchmark/Data/Array/CommonImports.hs"
5import qualified Streamly.Internal.Data.Array.Prim as A
6type Stream = A.Array
8#include "Streamly/Benchmark/Data/Array/Common.hs"
10-------------------------------------------------------------------------------
11-- Benchmark helpers
12-------------------------------------------------------------------------------
14-- Drain a source that generates an array in the IO monad
15{-# INLINE benchIOSrc #-}
16benchIOSrc :: String -> (Int -> IO (Stream a)) -> Benchmark
17benchIOSrc name src = benchIO name src id
19-------------------------------------------------------------------------------
20-- Bench Ops
21-------------------------------------------------------------------------------
23{-# INLINE sourceIntFromToFromList #-}
24sourceIntFromToFromList :: MonadIO m => Int -> Int -> m (Stream Int)
25sourceIntFromToFromList value n = P.return $ A.fromListN value [n..n + value]
27-- CPP:
28{-# INLINE sourceIntFromToFromStream #-}
29sourceIntFromToFromStream :: MonadIO m => Int -> Int -> m (Stream Int)
30sourceIntFromToFromStream value n = S.fold A.write $ S.enumerateFromTo n (n + value)
32-------------------------------------------------------------------------------
33-- Bench groups
34-------------------------------------------------------------------------------
36o_1_space_generation :: Int -> [Benchmark]
37o_1_space_generation value =
38 [ bgroup
39 "generation"
40 [ benchIOSrc "write . intFromTo" (sourceIntFromToFromStream value)
41 ]
42 ]
44moduleName :: String
45moduleName = "Data.Array.Prim"
47defStreamSize :: Int
48defStreamSize = defaultStreamSize
50main :: IO ()
51main = runWithCLIOpts defStreamSize allBenchmarks
53 where
55 allBenchmarks size =
56 bgroup (o_1_space_prefix moduleName) (o_1_space_generation size)
57 : commonBenchmarks size