on master help sign in
Add a nano benchmark for unfoldr, fix dev benchmarks
a30ef3eHarendra Kumar
benchmark/NanoBenchmarks.hs+13−1
@@ -4,8 +4,9 @@
4-------------------------------------------------------------------------------
4-------------------------------------------------------------------------------
5
5
6{-# LANGUAGE ScopedTypeVariables #-}
6{-# LANGUAGE ScopedTypeVariables #-}
7−import qualified Streamly.Streams.StreamD as S
7+import qualified Streamly.Streams.StreamK as S
8import Gauge
8import Gauge
9+import System.Random
9
10
10maxValue :: Int
11maxValue :: Int
11maxValue = 100000
12maxValue = 100000
@@ -28,6 +29,15 @@ sourceUnfoldrMN n = S.unfoldrM step n
28 then return Nothing
29 then return Nothing
29 else return (Just (cnt, cnt + 1))
30 else return (Just (cnt, cnt + 1))
30
31
32+{-# INLINE sourceUnfoldr #-}
33+sourceUnfoldr :: Monad m => Int -> S.Stream m Int
34+sourceUnfoldr n = S.unfoldr step n
35+ where
36+ step cnt =
37+ if cnt > n + maxValue
38+ then Nothing
39+ else Just (cnt, cnt + 1)
40+
31-------------------------------------------------------------------------------
41-------------------------------------------------------------------------------
32-- take-drop composition
42-- take-drop composition
33-------------------------------------------------------------------------------
43-------------------------------------------------------------------------------
@@ -75,6 +85,8 @@ iterateSource g i n = f i (sourceUnfoldrMN n)
75-- We keep all of them enabled by default for testing the build.
85-- We keep all of them enabled by default for testing the build.
76main :: IO ()
86main :: IO ()
77main = do
87main = do
88+ defaultMain [bench "unfoldr" $ nfIO $
89+ randomRIO (1,1) >>= \n -> S.runStream (sourceUnfoldr n)]
78 defaultMain [bench "take-drop" $ nfIO $ takeDrop sourceUnfoldrM]
90 defaultMain [bench "take-drop" $ nfIO $ takeDrop sourceUnfoldrM]
79 defaultMain [bench "dropWhileFalseX4" $
91 defaultMain [bench "dropWhileFalseX4" $
80 nfIO $ dropWhileFalseX4 sourceUnfoldrM]
92 nfIO $ dropWhileFalseX4 sourceUnfoldrM]
benchmark/StreamDOps.hs+1−1
@@ -59,7 +59,7 @@ sourceUnfoldrM n = S.unfoldrM step n
59
59
60{-# INLINE sourceFromEnum #-}
60{-# INLINE sourceFromEnum #-}
61sourceFromEnum :: Monad m => Int -> Stream m Int
61sourceFromEnum :: Monad m => Int -> Stream m Int
62−sourceFromEnum n = S.enumFromStepN n 1 value
62+sourceFromEnum n = S.intFromTo n (n + value)
63
63
64{-# INLINE sourceFromList #-}
64{-# INLINE sourceFromList #-}
65sourceFromList :: Monad m => Int -> Stream m Int
65sourceFromList :: Monad m => Int -> Stream m Int
src/Streamly/Streams/StreamD/Type.hs+1−1
@@ -12,7 +12,7 @@
12#include "../inline.hs"
12#include "../inline.hs"
13
13
14-- |
14-- |
15−-- Module : Streamly.Streams.StreamDType
15+-- Module : Streamly.Streams.StreamD.Type
16-- Copyright : (c) 2018 Harendra Kumar
16-- Copyright : (c) 2018 Harendra Kumar
17--
17--
18-- License : BSD3
18-- License : BSD3
src/Streamly/Streams/StreamK/Type.hs+1−1
@@ -11,7 +11,7 @@
11{-# LANGUAGE UndecidableInstances #-} -- XXX
11{-# LANGUAGE UndecidableInstances #-} -- XXX
12
12
13-- |
13-- |
14−-- Module : Streamly.Streams.StreamKType
14+-- Module : Streamly.Streams.StreamK.Type
15-- Copyright : (c) 2017 Harendra Kumar
15-- Copyright : (c) 2017 Harendra Kumar
16--
16--
17-- License : BSD3
17-- License : BSD3
streamly.cabal+5
@@ -481,7 +481,9 @@ benchmark base
481 hs-source-dirs: benchmark, src
481 hs-source-dirs: benchmark, src
482 main-is: BaseStreams.hs
482 main-is: BaseStreams.hs
483 other-modules: Streamly.SVar
483 other-modules: Streamly.SVar
484+ , Streamly.Streams.StreamK.Type
484 , Streamly.Streams.StreamK
485 , Streamly.Streams.StreamK
486+ , Streamly.Streams.StreamD.Type
485 , Streamly.Streams.StreamD
487 , Streamly.Streams.StreamD
486 , Streamly.Streams.Prelude
488 , Streamly.Streams.Prelude
487
489
@@ -537,7 +539,9 @@ executable nano-bench
537 hs-source-dirs: benchmark, src
539 hs-source-dirs: benchmark, src
538 main-is: NanoBenchmarks.hs
540 main-is: NanoBenchmarks.hs
539 other-modules: Streamly.SVar
541 other-modules: Streamly.SVar
542+ , Streamly.Streams.StreamK.Type
540 , Streamly.Streams.StreamK
543 , Streamly.Streams.StreamK
544+ , Streamly.Streams.StreamD.Type
541 , Streamly.Streams.StreamD
545 , Streamly.Streams.StreamD
542 default-language: Haskell2010
546 default-language: Haskell2010
543 ghc-options: -O2 -Wall
547 ghc-options: -O2 -Wall
@@ -550,6 +554,7 @@ executable nano-bench
550 , ghc-prim >= 0.2 && < 0.6
554 , ghc-prim >= 0.2 && < 0.6
551 , containers >= 0.5 && < 0.7
555 , containers >= 0.5 && < 0.7
552 , heaps >= 0.3 && < 0.4
556 , heaps >= 0.3 && < 0.4
557+ , random >= 1.0 && < 2.0
553
558
554 -- concurrency
559 -- concurrency
555 , atomic-primops >= 0.8 && < 0.9
560 , atomic-primops >= 0.8 && < 0.9