on master help sign in
Add fold benchmarks for span, spanBy, and spanByRolling
commitbf396f0db04137076ca4a5addac8809eda2aa031 authorAdithya Kumar <adithya@composewell.com> dateTue 9 Feb 2021, 18:26 (6 years ago) parent662aced
1 file changed+22−1
benchmark/Streamly/Benchmark/Data/Fold.hs+22−1
benchmark/Streamly/Benchmark/Data/Fold.hs+22−1
@@ -27,7 +27,7 @@ import qualified Streamly.Prelude as S
2727
2828import Gauge
2929import Streamly.Benchmark.Common
30−import Prelude hiding (all, any, take, unzip)
30+import Prelude hiding (all, any, take, unzip, span)
3131
3232-- We need a monadic bind here to make sure that the function f does not get
3333-- completely optimized out by the compiler in some cases.
@@ -162,6 +162,24 @@ classifyWith f = S.fold (FL.classifyWith f FL.sum)
162162unzip :: Monad m => SerialT m Int -> m (Int, Int)
163163unzip = IP.fold $ FL.map (\a -> (a, a)) (FL.unzip FL.sum FL.length)
164164
165+-------------------------------------------------------------------------------
166+-- Spanning
167+-------------------------------------------------------------------------------
168+
169+{-# INLINE span #-}
170+span :: Monad m => Int -> SerialT m Int -> m ((), ())
171+span bound = S.fold (FL.span (<= (bound `div` 2)) FL.drain FL.drain)
172+
173+{-# INLINE spanBy #-}
174+spanBy :: Monad m => Int -> SerialT m Int -> m ((), ())
175+spanBy bound =
176+ S.fold (FL.spanBy (\_ i -> i <= (bound `div` 2)) FL.drain FL.drain)
177+
178+{-# INLINE spanByRolling #-}
179+spanByRolling :: Monad m => Int -> SerialT m Int -> m ((), ())
180+spanByRolling bound =
181+ S.fold (FL.spanByRolling (\_ i -> i <= (bound `div` 2)) FL.drain FL.drain)
182+
165183-------------------------------------------------------------------------------
166184-- Benchmarks
167185-------------------------------------------------------------------------------
@@ -274,6 +292,9 @@ o_1_space_serial_composition value =
274292 $ demuxDefaultWith fn mp
275293 , benchIOSink value "demuxWith [sum, length]" $ demuxWith fn mp
276294 , benchIOSink value "classifyWith sum" $ classifyWith (fst . fn)
295+ , benchIOSink value "span" $ span value
296+ , benchIOSink value "spanBy" $ spanBy value
297+ , benchIOSink value "spanByRolling" $ spanByRolling value
277298 ]
278299 ]
279300