@@ -21,6 +21,8 @@ module Main (main) where
22import Control.DeepSeq (NFData(..))
22import Control.DeepSeq (NFData(..))
23import Control.Exception (SomeException, ErrorCall, try)
23import Control.Exception (SomeException, ErrorCall, try)
24+import Data.Char (ord)
25+import Data.Word (Word8)
24import Streamly.Internal.Data.Unfold (Unfold)
26import Streamly.Internal.Data.Unfold (Unfold)
25import System.IO (Handle, hClose)
27import System.IO (Handle, hClose)
26import System.Random (randomRIO)
28import System.Random (randomRIO)
@@ -693,8 +695,17 @@ o_1_space_zip size =
699+lf = fromIntegral (ord '\n')
701+-- | Split on line feed.
702+foldManySepBy :: Handle -> IO Int
704+ let u = UF.foldMany (FL.takeEndBy_ (== lf) FL.drain) FH.read
705+ in UF.fold FL.length u
696−o_1_space_nested :: Int -> [Benchmark]
707+o_1_space_nested :: BenchEnv -> Int -> [Benchmark]
697−o_1_space_nested size =
708+o_1_space_nested env size =
700 [ benchIO "(<*>) (sqrt n x sqrt n)" $ toNullAp size
711 [ benchIO "(<*>) (sqrt n x sqrt n)" $ toNullAp size
@@ -711,6 +722,8 @@ o_1_space_nested size =
711 , benchIO "filterSome" $ filterSome size
722 , benchIO "filterSome" $ filterSome size
713 , benchIO "concat" $ concat size
724 , benchIO "concat" $ concat size
725+ , mkBench "foldMany (Fold.takeEndBy_ (== lf) Fold.drain)" env
726+ $ \inh _ -> foldManySepBy inh
@@ -819,7 +832,7 @@ main = do
819 , o_1_space_transformation size
832 , o_1_space_transformation size
820 , o_1_space_filtering size
833 , o_1_space_filtering size
821 , o_1_space_zip size
834 , o_1_space_zip size
822− , o_1_space_nested size
835+ , o_1_space_nested env size
823 , o_1_space_copy_read_exceptions env
836 , o_1_space_copy_read_exceptions env
825 , bgroup (o_n_space_prefix moduleName)
838 , bgroup (o_n_space_prefix moduleName)