@@ -24,6 +24,7 @@ import Streamly.Prelude (MonadAsync, SerialT, IsStream)
2424import System.Random (randomRIO)
2525
2626import qualified Streamly.Prelude as Stream
27+import qualified Streamly.Internal.Data.Array.Foreign as Array
2728import qualified Streamly.Internal.Data.Array.Foreign.Mut as MArray
2829
2930import Gauge hiding (env)
@@ -49,8 +50,9 @@ benchIO
4950benchIO name src sink =
5051 bench name $ nfIO $ randomRIO (1,1) >>= sink . src
5152
52−o_1_space_serial_marray :: Int -> MArray.Array Int -> [Benchmark]
53−o_1_space_serial_marray value array =
53+o_1_space_serial_marray ::
54+ Int -> (MArray.Array Int, Array.Array Int) -> [Benchmark]
55+o_1_space_serial_marray value ~(array, indices) =
5456 [ benchIO "partitionBy (< 0)" (const array)
5557 $ MArray.partitionBy (< 0)
5658 , benchIO "partitionBy (> 0)" (const array)
@@ -63,6 +65,9 @@ o_1_space_serial_marray value array =
6365 $ MArray.strip (\x -> x < value `div` 2 || x > value `div` 2)
6466 , benchIO "strip (> 0)" (const array)
6567 $ MArray.strip (> 0)
68+ , benchIO "modifyIndices (+ 1)" (const indices)
69+ $ Stream.fold (MArray.modifyIndices (+ 1) array)
70+ . Stream.unfold Array.read
6671 ]
6772
6873-------------------------------------------------------------------------------
@@ -78,7 +83,10 @@ main = do
7883
7984 where
8085
81− alloc value = MArray.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
86+ alloc value = do
87+ marr <- MArray.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
88+ indices <- Array.fromStream (sourceUnfoldrM value 0 :: SerialT IO Int)
89+ return (marr, indices)
8290
8391 allBenchmarks array value =
8492 [ bgroup (o_1_space_prefix moduleName) $