on master help sign in
Add foldBreak benchmark to array streams
9943e65Harendra Kumar
benchmark/Streamly/Benchmark/Data/Array/Stream/Foreign.hs+12−1
@@ -24,9 +24,10 @@ module Main
24 ) where
24 ) where
25
25
26import Control.DeepSeq (NFData(..))
26import Control.DeepSeq (NFData(..))
27−import Control.Monad (void)
27+import Control.Monad (void, when)
28import Control.Monad.Catch (MonadCatch)
28import Control.Monad.Catch (MonadCatch)
29import Data.Functor.Identity (runIdentity)
29import Data.Functor.Identity (runIdentity)
30+import Data.Maybe (isJust)
30import Data.Word (Word8)
31import Data.Word (Word8)
31import System.IO (Handle)
32import System.IO (Handle)
32import System.Random (randomRIO)
33import System.Random (randomRIO)
@@ -233,11 +234,21 @@ fold s = void $ ArrayStream.foldBreak Fold.drain s
233parse :: Int -> SerialT IO (Array.Array Int) -> IO ()
234parse :: Int -> SerialT IO (Array.Array Int) -> IO ()
234parse value s = void $ ArrayStream.parseBreak (drainWhile (< value)) s
235parse value s = void $ ArrayStream.parseBreak (drainWhile (< value)) s
235
236
237+{-# INLINE foldBreak #-}
238+foldBreak :: SerialT IO (Array.Array Int) -> IO ()
239+foldBreak s = do
240+ (r, s1) <- ArrayStream.foldBreak Fold.one s
241+ when (isJust r) $ foldBreak s1
242+
236o_1_space_serial_array ::
243o_1_space_serial_array ::
237 Int -> [Array.Array Int] -> [Array.Array Int] -> [Benchmark]
244 Int -> [Array.Array Int] -> [Array.Array Int] -> [Benchmark]
238o_1_space_serial_array bound arraysSmall arraysBig =
245o_1_space_serial_array bound arraysSmall arraysBig =
239 [ benchIO "fold (of 100)" (\_ -> Stream.fromList arraysSmall) fold
246 [ benchIO "fold (of 100)" (\_ -> Stream.fromList arraysSmall) fold
240 , benchIO "fold (single)" (\_ -> Stream.fromList arraysBig) fold
247 , benchIO "fold (single)" (\_ -> Stream.fromList arraysBig) fold
248+ , benchIO
249+ "foldBreak (recursive, small arrays)"
250+ (\_ -> Stream.fromList arraysSmall)
251+ foldBreak
241 , benchIO "parse (of 100)" (\_ -> Stream.fromList arraysSmall)
252 , benchIO "parse (of 100)" (\_ -> Stream.fromList arraysSmall)
242 $ parse bound
253 $ parse bound
243 , benchIO "parse (single)" (\_ -> Stream.fromList arraysBig)
254 , benchIO "parse (single)" (\_ -> Stream.fromList arraysBig)