on master help sign in
Add a benchmark for parseBreak on array streams
2831e12Harendra Kumar
benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs+13−1
@@ -25,7 +25,7 @@ module Main
25
25
26import Control.DeepSeq (NFData(..))
26import Control.DeepSeq (NFData(..))
27import Control.Monad (void, when)
27import Control.Monad (void, when)
28−import Control.Monad.Catch (MonadCatch)
28+import Control.Monad.Catch (MonadCatch, try, SomeException)
29import Data.Functor.Identity (runIdentity)
29import Data.Functor.Identity (runIdentity)
30import Data.Maybe (isJust)
30import Data.Maybe (isJust)
31import Data.Word (Word8)
31import Data.Word (Word8)
@@ -240,6 +240,14 @@ foldBreak s = do
240 (r, s1) <- ArrayStream.foldBreak Fold.one s
240 (r, s1) <- ArrayStream.foldBreak Fold.one s
241 when (isJust r) $ foldBreak s1
241 when (isJust r) $ foldBreak s1
242
242
243+{-# INLINE parseBreak #-}
244+parseBreak :: SerialT IO (Array.Array Int) -> IO ()
245+parseBreak s = do
246+ r <- try $ ArrayStream.parseBreak Parser.one s
247+ case r of
248+ Left (_ :: SomeException) -> return ()
249+ Right (_, s1) -> parseBreak s1
250+
243o_1_space_serial_array ::
251o_1_space_serial_array ::
244 Int -> [Array.Array Int] -> [Array.Array Int] -> [Benchmark]
252 Int -> [Array.Array Int] -> [Array.Array Int] -> [Benchmark]
245o_1_space_serial_array bound arraysSmall arraysBig =
253o_1_space_serial_array bound arraysSmall arraysBig =
@@ -253,6 +261,10 @@ o_1_space_serial_array bound arraysSmall arraysBig =
253 $ parse bound
261 $ parse bound
254 , benchIO "parse (single)" (\_ -> Stream.fromList arraysBig)
262 , benchIO "parse (single)" (\_ -> Stream.fromList arraysBig)
255 $ parse bound
263 $ parse bound
264+ , benchIO
265+ "parseBreak (recursive, small arrays)"
266+ (\_ -> Stream.fromList arraysSmall)
267+ parseBreak
256 ]
268 ]
257
269
258-------------------------------------------------------------------------------
270-------------------------------------------------------------------------------