@@ -1,3 +1,5 @@
1+{-# LANGUAGE FlexibleContexts #-}
2-- Module : Main
4-- Module : Main
3-- Copyright : (c) 2018 Composewell Technologies
5-- Copyright : (c) 2018 Composewell Technologies
@@ -5,7 +7,7 @@
5-- License : BSD3
7-- License : BSD3
6-- Maintainer : streamly@composewell.com
8-- Maintainer : streamly@composewell.com
8−import Streamly.Prelude (asyncly, aheadly, maxThreads)
10+import Streamly.Prelude (asyncly, aheadly, maxThreads, IsStream, MonadAsync)
9import qualified Streamly.Prelude as S
11import qualified Streamly.Prelude as S
11import Streamly.Benchmark.Common
13import Streamly.Benchmark.Common
@@ -20,6 +22,19 @@ moduleName = "Prelude.Rate"
20-- Average Rate
22-- Average Rate
21-------------------------------------------------------------------------------
23-------------------------------------------------------------------------------
25+{-# INLINE rateNothing #-}
26+rateNothing :: (MonadAsync m, IsStream t) => Int -> Int -> t m Int
27+rateNothing value = S.rate Nothing . sourceUnfoldrM value
29+{-# INLINE avgRate #-}
30+avgRate :: (MonadAsync m, IsStream t) => Int -> Double -> Int -> t m Int
31+avgRate value rate_ = S.avgRate rate_ . sourceUnfoldrM value
33+{-# INLINE avgRateThreads1 #-}
34+avgRateThreads1 :: (MonadAsync m, IsStream t) => Int -> Double -> Int -> t m Int
35+avgRateThreads1 value rate_ =
36+ maxThreads 1 . S.avgRate rate_ . sourceUnfoldrM value
23-- XXX arbitrarily large rate should be the same as rate Nothing
38-- XXX arbitrarily large rate should be the same as rate Nothing
24o_1_space_async_avgRate :: Int -> [Benchmark]
39o_1_space_async_avgRate :: Int -> [Benchmark]
25o_1_space_async_avgRate value =
40o_1_space_async_avgRate value =
@@ -27,18 +42,13 @@ o_1_space_async_avgRate value =
27 [ bgroup "avgRate"
42 [ bgroup "avgRate"
28 -- benchIO "unfoldr" $ toNull asyncly
43 -- benchIO "unfoldr" $ toNull asyncly
29 -- benchIOSrc asyncly "unfoldrM" (sourceUnfoldrM value)
44 -- benchIOSrc asyncly "unfoldrM" (sourceUnfoldrM value)
30− [ benchIOSrc asyncly "unfoldrM/Nothing"
45+ [ benchIOSrc asyncly "Nothing" $ rateNothing value
31− (S.rate Nothing . sourceUnfoldrM value)
32− , benchIOSrc asyncly "unfoldrM/1,000,000"
46+ , benchIOSrc asyncly "1M" $ avgRate value 1000000
33− (S.avgRate 1000000 . sourceUnfoldrM value)
34− , benchIOSrc asyncly "unfoldrM/3,000,000"
47+ , benchIOSrc asyncly "3M" $ avgRate value 3000000
35− (S.avgRate 3000000 . sourceUnfoldrM value)
36− , benchIOSrc asyncly "unfoldrM/10,000,000/maxThreads1"
48+ , benchIOSrc asyncly "10M/maxThreads1"
37− (maxThreads 1 . S.avgRate 10000000 . sourceUnfoldrM value)
49+ $ avgRateThreads1 value 10000000
38− , benchIOSrc asyncly "unfoldrM/10,000,000"
50+ , benchIOSrc asyncly "10M" $ avgRate value 10000000
39− (S.avgRate 10000000 . sourceUnfoldrM value)
40− , benchIOSrc asyncly "unfoldrM/20,000,000"
51+ , benchIOSrc asyncly "20M" $ avgRate value 20000000
41− (S.avgRate 20000000 . sourceUnfoldrM value)
@@ -47,8 +57,7 @@ o_1_space_ahead_avgRate :: Int -> [Benchmark]
47o_1_space_ahead_avgRate value =
57o_1_space_ahead_avgRate value =
48 [ bgroup "aheadly"
58 [ bgroup "aheadly"
49 [ bgroup "avgRate"
59 [ bgroup "avgRate"
50− [ benchIOSrc aheadly "unfoldrM/1,000,000"
60+ [ benchIOSrc aheadly "1M" $ avgRate value 1000000
51− (S.avgRate 1000000 . sourceUnfoldrM value)