@@ -24,7 +24,9 @@ import Control.Monad (when)
24import Data.Maybe (isJust)
24import Data.Maybe (isJust)
25import System.Random (randomRIO)
25import System.Random (randomRIO)
26import Prelude hiding
26import Prelude hiding
27− (tail, mapM_, foldl, last, map, mapM, concatMap, zipWith, init)
27+ ( tail, mapM_, foldl, last, map, mapM, concatMap, zipWith, init, iterate
29import qualified Prelude as P
31import qualified Prelude as P
30import qualified Data.List as List
32import qualified Data.List as List
@@ -44,12 +46,6 @@ import Test.Inspection
45Benchmarks that need to be added
47Benchmarks that need to be added
53-- fromList
49-- fromList
55-- bindWith
51-- bindWith
@@ -138,6 +134,30 @@ unfoldrM streamLen n = S.unfoldrM step n
138 then return Nothing
134 then return Nothing
139 else return (Just (cnt, cnt + 1))
135 else return (Just (cnt, cnt + 1))
137+{-# INLINE repeat #-}
138+repeat :: Int -> Int -> Stream m Int
139+repeat streamLen = S.take streamLen . S.repeat
141+{-# INLINE repeatM #-}
142+repeatM :: S.MonadAsync m => Int -> Int -> Stream m Int
143+repeatM streamLen = S.take streamLen . S.repeatM . return
145+{-# INLINE replicate #-}
146+replicate :: Int -> Int -> Stream m Int
147+replicate = S.replicate
149+{-# INLINE replicateM #-}
150+replicateM :: S.MonadAsync m => Int -> Int -> Stream m Int
151+replicateM streamLen = S.replicateM streamLen . return
153+{-# INLINE iterate #-}
154+iterate :: Int -> Int -> Stream m Int
155+iterate streamLen = S.take streamLen . S.iterate (+1)
157+{-# INLINE iterateM #-}
158+iterateM :: S.MonadAsync m => Int -> Int -> Stream m Int
159+iterateM streamLen = S.take streamLen . S.iterateM (return . (+1)) . return
141{-# INLINE fromFoldable #-}
161{-# INLINE fromFoldable #-}
142fromFoldable :: Int -> Int -> Stream m Int
162fromFoldable :: Int -> Int -> Stream m Int
143fromFoldable streamLen n = S.fromFoldable [n..n+streamLen]
163fromFoldable streamLen n = S.fromFoldable [n..n+streamLen]
@@ -570,8 +590,14 @@ moduleName = "Data.Stream.StreamK"
570o_1_space_generation :: Int -> Benchmark
590o_1_space_generation :: Int -> Benchmark
571o_1_space_generation streamLen =
591o_1_space_generation streamLen =
572 bgroup "generation"
592 bgroup "generation"
573− [ benchFold "unfoldr" drain (unfoldr streamLen)
593+ [ benchFold "unfoldr" drain (unfoldr streamLen)
574− , benchFold "unfoldrM" drain (unfoldrM streamLen)
594+ , benchFold "unfoldrM" drain (unfoldrM streamLen)
595+ , benchFold "repeat" drain (repeat streamLen)
596+ , benchFold "repeatM" drain (repeatM streamLen)
597+ , benchFold "replicate" drain (replicate streamLen)
598+ , benchFold "replicateM" drain (replicateM streamLen)
599+ , benchFold "iterate" drain (iterate streamLen)
600+ , benchFold "iterateM" drain (iterateM streamLen)
576 , benchFold "fromFoldable" drain (fromFoldable streamLen)
602 , benchFold "fromFoldable" drain (fromFoldable streamLen)
577 , benchFold "fromFoldableM" drain (fromFoldableM streamLen)
603 , benchFold "fromFoldableM" drain (fromFoldableM streamLen)