@@ -5,64 +5,19 @@
55-- License : BSD3
66-- Maintainer : streamly@composewell.com
77
8−-- Rate benchmarks are kept separate because they need more running time to
9−-- provide stable results.
8+import Streamly.Benchmark.Common
9+import Streamly.Benchmark.Prelude
1010
11−-- import Data.Functor.Identity (Identity, runIdentity)
12−import System.Random (randomRIO)
13−
14−import Streamly.Benchmark.Common (parseCLIOpts)
15−
16−import Streamly
1711import Gauge
1812
19−import qualified Streamly.Benchmark.Prelude as Ops
20−
21−-- | Takes a source, and uses it with a default drain/fold method.
22−{-# INLINE benchSrcIO #-}
23−benchSrcIO
24− :: (t IO Int -> SerialT IO Int)
25− -> String
26− -> (Int -> t IO Int)
27− -> Benchmark
28−benchSrcIO t name f
29− = bench name $ nfIO $ randomRIO (1,1) >>= Ops.toNull t . f
30−
31−{-
32−_benchId :: NFData b => String -> (Ops.Stream m Int -> Identity b) -> Benchmark
33−_benchId name f = bench name $ nf (runIdentity . f) (Ops.source 10)
34−-}
35−
36−defaultStreamSize :: Int
37−defaultStreamSize = 100000
38−
3913main :: IO ()
4014main = do
41− -- XXX Fix indentation
42− (value, cfg, benches) <- parseCLIOpts defaultStreamSize
43− value `seq` runMode (mode cfg) cfg benches
44− -- XXX arbitrarily large rate should be the same as rate Nothing
45− [ bgroup "avgrate"
46− [ bgroup "asyncly"
47− [ -- benchIO "unfoldr" $ Ops.toNull asyncly
48− benchSrcIO asyncly "unfoldrM" (Ops.sourceUnfoldrM value)
49− , benchSrcIO asyncly "unfoldrM/Nothing"
50− (rate Nothing . Ops.sourceUnfoldrM value)
51− , benchSrcIO asyncly "unfoldrM/1,000,000"
52− (avgRate 1000000 . Ops.sourceUnfoldrM value)
53− , benchSrcIO asyncly "unfoldrM/3,000,000"
54− (avgRate 3000000 . Ops.sourceUnfoldrM value)
55− , benchSrcIO asyncly "unfoldrM/10,000,000/maxThreads1"
56− (maxThreads 1 . avgRate 10000000 . Ops.sourceUnfoldrM value)
57− , benchSrcIO asyncly "unfoldrM/10,000,000"
58− (avgRate 10000000 . Ops.sourceUnfoldrM value)
59− , benchSrcIO asyncly "unfoldrM/20,000,000"
60− (avgRate 20000000 . Ops.sourceUnfoldrM value)
61− ]
62− , bgroup "aheadly"
63− [
64− benchSrcIO aheadly "unfoldrM/1,000,000"
65− (avgRate 1000000 . Ops.sourceUnfoldrM value)
66− ]
67− ]
68− ]
15+ (value, cfg, benches) <- parseCLIOpts defaultStreamSize
16+ value `seq`
17+ runMode
18+ (mode cfg)
19+ cfg
20+ benches
21+ -- XXX arbitrarily large rate should be the same as rate Nothing
22+ (concat
23+ [o_1_space_async_avgRate value, o_1_space_ahead_avgRate value])