on 09c955e help sign in
streamly/benchmark/BaseStreams.hs
111 lines 4.4 kB history raw
1-- |
2-- Module : Main
3-- Copyright : (c) 2018 Harendra Kumar
4--
5-- License : BSD3
6-- Maintainer : harendra.kumar@gmail.com
8import Control.DeepSeq (NFData)
9-- import Data.Functor.Identity (Identity, runIdentity)
10import System.Random (randomRIO)
12import Gauge
13import qualified StreamDOps as D
14import qualified StreamKOps as K
16-- We need a monadic bind here to make sure that the function f does not get
17-- completely optimized out by the compiler in some cases.
18{-# INLINE benchIO #-}
19benchIO :: String -> (a IO Int -> IO ()) -> (Int -> a IO Int) -> Benchmark
20benchIO name run f = bench name $ nfIO $ randomRIO (1,1000) >>= run . f
22benchFold :: NFData b
23 => String -> (t IO Int -> IO b) -> (Int -> t IO Int) -> Benchmark
24benchFold name f src = bench name $ nfIO $ randomRIO (1,1000) >>= f . src
26{-
27_benchId :: NFData b => String -> (Ops.Stream m Int -> Identity b) -> Benchmark
28_benchId name f = bench name $ nf (runIdentity . f) (Ops.source 10)
29-}
31main :: IO ()
32main = do
33 defaultMain
34 [ bgroup "streamD"
35 [ bgroup "generation"
36 [ benchIO "unfoldr" D.toNull D.sourceUnfoldr
37 , benchIO "unfoldrM" D.toNull D.sourceUnfoldrM
38 , benchIO "fromEnum" D.toNull D.sourceFromEnum
40 , benchIO "fromFoldable" D.toNull D.sourceFromFoldable
41 -- , benchIO "fromFoldableM" D.sourceFromFoldableM
42 ]
43 , bgroup "elimination"
44 [ benchIO "toNull" D.toNull D.sourceUnfoldrM
45 , benchIO "uncons" D.uncons D.sourceUnfoldrM
46 , benchIO "nullHeadTail" D.nullHeadTail D.sourceUnfoldrM
47 ]
48 , bgroup "transformation"
49 [ -- benchIO "scan" D.scan D.sourceUnfoldrM
50 benchIO "map" D.map D.sourceUnfoldrM
51 , benchIO "mapM" D.mapM D.sourceUnfoldrM
52 ]
53 , bgroup "filtering"
54 [ benchIO "filter-even" D.filterEven D.sourceUnfoldrM
55 , benchIO "filter-all-out" D.filterAllOut D.sourceUnfoldrM
56 , benchIO "filter-all-in" D.filterAllIn D.sourceUnfoldrM
57 , benchIO "take-all" D.takeAll D.sourceUnfoldrM
58 ]
59 ]
60 , bgroup "streamK"
61 [ bgroup "generation"
62 [ benchIO "unfoldr" K.toNull K.sourceUnfoldr
63 , benchIO "unfoldrM" K.toNull K.sourceUnfoldrM
64 -- , benchIO "fromEnum" K.toNull K.sourceFromEnum
66 , benchIO "fromFoldable" K.toNull K.sourceFromFoldable
67 , benchIO "fromFoldableM" K.toNull K.sourceFromFoldableM
69 -- appends
70 , benchIO "foldMapWith" K.toNull K.sourceFoldMapWith
71 , benchIO "foldMapWithM" K.toNull K.sourceFoldMapWithM
72 ]
73 , bgroup "elimination"
74 [ benchIO "toNull" K.toNull K.sourceUnfoldrM
75 , benchIO "uncons" K.uncons K.sourceUnfoldrM
76 , benchIO "nullHeadTail" K.nullHeadTail K.sourceUnfoldrM
77 , benchFold "toList" K.toList K.sourceUnfoldrM
78 , benchFold "fold" K.foldl K.sourceUnfoldrM
79 , benchFold "last" K.last K.sourceUnfoldrM
80 ]
81 , bgroup "transformation"
82 [ benchIO "scan" K.scan K.sourceUnfoldrM
83 , benchIO "map" K.map K.sourceUnfoldrM
84 , benchIO "mapM" K.mapM K.sourceUnfoldrM
85 , benchIO "concat" K.concat K.sourceUnfoldrM
86 ]
87 , bgroup "filtering"
88 [ benchIO "filter-even" K.filterEven K.sourceUnfoldrM
89 , benchIO "filter-all-out" K.filterAllOut K.sourceUnfoldrM
90 , benchIO "filter-all-in" K.filterAllIn K.sourceUnfoldrM
91 , benchIO "take-all" K.takeAll K.sourceUnfoldrM
92 , benchIO "takeWhile-true" K.takeWhileTrue K.sourceUnfoldrM
93 , benchIO "drop-all" K.dropAll K.sourceUnfoldrM
94 , benchIO "dropWhile-true" K.dropWhileTrue K.sourceUnfoldrM
95 ]
96 , benchIO "zip" K.zip K.sourceUnfoldrM
97 , bgroup "compose"
98 [ benchIO "mapM" K.composeMapM K.sourceUnfoldrM
99 , benchIO "map-with-all-in-filter" K.composeMapAllInFilter K.sourceUnfoldrM
100 , benchIO "all-in-filters" K.composeAllInFilters K.sourceUnfoldrM
101 , benchIO "all-out-filters" K.composeAllOutFilters K.sourceUnfoldrM
102 ]
103 -- Scaling with same operation in sequence
104 , bgroup "compose-scaling"
105 [ benchIO "1" (K.composeScaling 1) K.sourceUnfoldrM
106 , benchIO "2" (K.composeScaling 2) K.sourceUnfoldrM
107 , benchIO "3" (K.composeScaling 3) K.sourceUnfoldrM
108 , benchIO "4" (K.composeScaling 4) K.sourceUnfoldrM
109 ]
110 ]
111 ]