@@ -17,6 +17,7 @@ module Main
17import Control.DeepSeq (NFData(..))
17import Control.DeepSeq (NFData(..))
18import Control.Monad.Catch (MonadCatch, MonadThrow)
18import Control.Monad.Catch (MonadCatch, MonadThrow)
19import Data.Foldable (asum)
19import Data.Foldable (asum)
20+import Data.Function ((&))
20import Data.Functor (($>))
21import Data.Functor (($>))
21import Data.Maybe (fromMaybe)
22import Data.Maybe (fromMaybe)
22import Streamly.Internal.Data.Stream (Stream)
23import Streamly.Internal.Data.Stream (Stream)
@@ -240,10 +241,20 @@ parseManyGroupsRolling b =
241{-# INLINE parseManyGroupsRollingEither #-}
242{-# INLINE parseManyGroupsRollingEither #-}
242parseManyGroupsRollingEither :: (MonadThrow m, MonadCatch m) =>
243parseManyGroupsRollingEither :: (MonadThrow m, MonadCatch m) =>
243− (Int -> Int -> Bool) -> Stream m Int -> m ()
244+ (Int -> Int -> Bool) -> Int -> m ()
244−parseManyGroupsRollingEither cmp =
245+parseManyGroupsRollingEither cmp value = do
246+ sourceUnfoldrM value 1
247+ & Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
245− Stream.fold Fold.drain
248+ & Stream.fold Fold.drain
250+{-# INLINE parseManyGroupsRollingEitherAlt #-}
251+parseManyGroupsRollingEitherAlt :: (MonadThrow m, MonadCatch m) =>
252+ (Int -> Int -> Bool) -> Int -> m ()
253+parseManyGroupsRollingEitherAlt cmp value = do
254+ sourceUnfoldrM value 1
255+ & fmap (\x -> if even x then x + 2 else x)
246− . Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
256+ & Stream.parseManyD (PR.groupByRollingEither cmp Fold.drain Fold.drain)
257+ & Stream.fold Fold.drain
248-------------------------------------------------------------------------------
259-------------------------------------------------------------------------------
249-- Parsing with unfolds
260-- Parsing with unfolds
@@ -368,12 +379,12 @@ o_1_space_serial_nested value =
368 , benchIOSink value "parseMany groupBy (1 group)" $ parseManyGroups True
379 , benchIOSink value "parseMany groupBy (1 group)" $ parseManyGroups True
369 , benchIOSink value "parseMany groupRollingBy (1 group)"
380 , benchIOSink value "parseMany groupRollingBy (1 group)"
370 $ parseManyGroupsRolling True
381 $ parseManyGroupsRolling True
371− , benchIOSink value "parseMany groupRollingByEither (Left)"
382+ , bench "parseMany groupRollingByEither (Left)"
372− $ parseManyGroupsRollingEither (<)
383+ $ nfIO $ parseManyGroupsRollingEither (<) value
373− , benchIOSink value "parseMany groupRollingByEither (Right)"
384+ , bench "parseMany groupRollingByEither (Right)"
374− $ parseManyGroupsRollingEither (>)
385+ $ nfIO $ parseManyGroupsRollingEither (>) value
375− , benchIOSinkRandom value "parseMany groupRollingByEither (Alternating)"
386+ , bench "parseMany groupRollingByEither (Alternating)"
376− $ parseManyGroupsRollingEither (>)
387+ $ nfIO $ parseManyGroupsRollingEitherAlt (>) value
379o_1_space_serial_unfold :: Int -> [Array.Array Int] -> [Benchmark]
390o_1_space_serial_unfold :: Int -> [Array.Array Int] -> [Benchmark]
@@ -412,7 +423,9 @@ o_n_space_serial value =
412-------------------------------------------------------------------------------
423-------------------------------------------------------------------------------
414main :: IO ()
425main :: IO ()
427+ x <- randomRIO (1,1)
415−main = runWithCLIOptsEnv defaultStreamSize alloc allBenchmarks
428+ runWithCLIOptsEnv (defaultStreamSize + x) alloc allBenchmarks