@@ -18,6 +18,7 @@ import qualified Streamly.Prelude as S
1818
1919import Gauge
2020import Streamly.Benchmark.Common hiding (benchPureSrc)
21+import qualified Streamly.Benchmark.Prelude as P
2122
2223#ifdef MEMORY_ARRAY
2324import qualified GHC.Exts as GHC
@@ -70,26 +71,6 @@ benchIO' name src f = bench name $ nfIO $
7071benchIOSink :: NFData b => Int -> String -> (Ops.Stream Int -> IO b) -> Benchmark
7172benchIOSink value name f = benchIO' name (Ops.sourceIntFromTo value) f
7273
73−{-# INLINE sourceUnfoldrM #-}
74−sourceUnfoldrM :: (S.IsStream t, S.MonadAsync m) => Int -> Int -> t m Int
75−sourceUnfoldrM value n = S.unfoldrM step n
76− where
77− step cnt =
78− if cnt > n + value
79− then return Nothing
80− else return (Just (cnt, cnt + 1))
81−
82−{-# INLINE source #-}
83−source :: (S.MonadAsync m, S.IsStream t) => Int -> Int -> t m Int
84−source = sourceUnfoldrM
85−
86− -- | Takes a fold method, and uses it with a default source.
87−{-# INLINE benchIOSinkF #-}
88−benchIOSinkF
89− :: (S.IsStream t, NFData b)
90− => Int -> String -> (t IO Int -> IO b) -> Benchmark
91−benchIOSinkF value name f = bench name $ nfIO $ randomRIO (1,1) >>= f . source value
92−
9374o_1_space_generation :: Int -> [Benchmark]
9475o_1_space_generation value =
9576 [ bgroup
@@ -139,8 +120,8 @@ o_1_space_elimination value =
139120 , benchIOSink value "foldl'" Ops.pureFoldl'
140121 , benchIOSink value "read" Ops.unfoldReadDrain
141122 , benchIOSink value "toStreamRev" Ops.toStreamRevDrain
142− , benchIOSinkF value "lastN.1" (S.fold (IA.lastN 1))
143− , benchIOSinkF value "lastN.10" (S.fold (IA.lastN 10))
123+ , benchFold "lastN.1" (S.fold (IA.lastN 1)) (P.sourceUnfoldrM value)
124+ , benchFold "lastN.10" (S.fold (IA.lastN 10)) (P.sourceUnfoldrM value)
144125#if !defined(DATA_ARRAY_PRIM) && !defined(DATA_ARRAY_PRIM_PINNED)
145126#ifdef DEVBUILD
146127 , benchPureSink value "foldable/foldl'" Ops.foldableFoldl'
@@ -155,8 +136,10 @@ o_n_heap_serial value =
155136 [ bgroup "elimination"
156137 [
157138 -- Converting the stream to an array
158− benchIOSinkF value "lastN.Max" (S.fold (IA.lastN (value + 1)))
159− , benchIOSinkF value "writeN" (S.fold (A.writeN value))
139+ benchFold "lastN.Max" (S.fold (IA.lastN (value + 1)))
140+ (P.sourceUnfoldrM value)
141+ , benchFold "writeN" (S.fold (A.writeN value))
142+ (P.sourceUnfoldrM value)
160143 ]
161144 ]
162145
@@ -212,6 +195,7 @@ main = do
212195 , o_1_space_elimination size
213196 , o_1_space_transformation size
214197 , o_1_space_transformationX4 size
215− , o_n_heap_serial size
216198 ]
199+ , bgroup (o_n_space_prefix moduleName) $
200+ o_n_heap_serial size
217201 ]