3-- Copyright : (c) 2018 Harendra Kumar
6-- Maintainer : harendra.kumar@gmail.com
10import Control.DeepSeq (NFData)
11-- import Data.Functor.Identity (Identity, runIdentity)
12import System.Random (randomRIO)
15import qualified StreamDOps as D
16import qualified StreamKOps as K
18-- We need a monadic bind here to make sure that the function f does not get
19-- completely optimized out by the compiler in some cases.
21benchIO :: String -> (a IO Int -> IO ()) -> (Int -> a IO Int) -> Benchmark
22benchIO name run f = bench name $ nfIO $ randomRIO (1,1000) >>= run . f
25 => String -> (t IO Int -> IO b) -> (Int -> t IO Int) -> Benchmark
26benchFold name f src = bench name $ nfIO $ randomRIO (1,1000) >>= f . src
29_benchId :: NFData b => String -> (Ops.Stream m Int -> Identity b) -> Benchmark
30_benchId name f = bench name $ nf (runIdentity . f) (Ops.source 10)
38 [ benchIO "unfoldr" D.toNull D.sourceUnfoldr
39 , benchIO "unfoldrM" D.toNull D.sourceUnfoldrM
40 , benchIO "fromEnum" D.toNull D.sourceFromEnum
42 , benchIO "fromList" D.toNull D.sourceFromList
43 -- , benchIO "fromFoldableM" D.sourceFromFoldableM
45 , bgroup "elimination"
46 [ benchIO "toNull" D.toNull D.sourceUnfoldrM
47 , benchIO "uncons" D.uncons D.sourceUnfoldrM
48 , benchIO "nullHeadTail" D.nullHeadTail D.sourceUnfoldrM
50 , bgroup "transformation"
51 [ benchIO "scanlM'" D.scan D.sourceUnfoldrM
52 , benchIO "map" D.map D.sourceUnfoldrM
53 , benchIO "mapM" D.mapM D.sourceUnfoldrM
56 [ benchIO "filter-even" D.filterEven D.sourceUnfoldrM
57 , benchIO "filter-all-out" D.filterAllOut D.sourceUnfoldrM
58 , benchIO "filter-all-in" D.filterAllIn D.sourceUnfoldrM
59 , benchIO "take-all" D.takeAll D.sourceUnfoldrM
60 , benchIO "takeWhile-true" D.takeWhileTrue D.sourceUnfoldrM
61 , benchIO "drop-all" D.dropAll D.sourceUnfoldrM
62 , benchIO "dropWhile-true" D.dropWhileTrue D.sourceUnfoldrM
64 , benchIO "zip" D.zip D.sourceUnfoldrM
66 [ benchIO "mapM" D.composeMapM D.sourceUnfoldrM
67#if __GLASGOW_HASKELL__ != 802
68 , benchIO "map-with-all-in-filter" D.composeMapAllInFilter D.sourceUnfoldrM
69 , benchIO "all-in-filters" D.composeAllInFilters D.sourceUnfoldrM
70 , benchIO "all-out-filters" D.composeAllOutFilters D.sourceUnfoldrM
73 -- Scaling with same operation in sequence
74 , bgroup "compose-scaling"
75 [ benchIO "1" (D.composeScaling 1) D.sourceUnfoldrM
76 , benchIO "2" (D.composeScaling 2) D.sourceUnfoldrM
77 , benchIO "3" (D.composeScaling 3) D.sourceUnfoldrM
78 , benchIO "4" (D.composeScaling 4) D.sourceUnfoldrM
83 [ benchIO "unfoldr" K.toNull K.sourceUnfoldr
84 , benchIO "unfoldrM" K.toNull K.sourceUnfoldrM
85 -- , benchIO "fromEnum" K.toNull K.sourceFromEnum
87 , benchIO "fromFoldable" K.toNull K.sourceFromFoldable
88 -- , benchIO "fromFoldableM" K.toNull K.sourceFromFoldableM
91 , benchIO "foldMapWith" K.toNull K.sourceFoldMapWith
92 , benchIO "foldMapWithM" K.toNull K.sourceFoldMapWithM
94 , bgroup "elimination"
95 [ benchIO "toNull" K.toNull K.sourceUnfoldrM
96 , benchIO "uncons" K.uncons K.sourceUnfoldrM
97 , benchFold "init" K.init K.sourceUnfoldrM
98 , benchFold "tail" K.tail K.sourceUnfoldrM
99 , benchIO "nullHeadTail" K.nullHeadTail K.sourceUnfoldrM
100 , benchFold "toList" K.toList K.sourceUnfoldrM
101 , benchFold "fold" K.foldl K.sourceUnfoldrM
102 , benchFold "last" K.last K.sourceUnfoldrM
104 , bgroup "transformation"
105 [ benchIO "scan" K.scan K.sourceUnfoldrM
106 , benchIO "map" K.map K.sourceUnfoldrM
107 , benchIO "mapM" K.mapM K.sourceUnfoldrM
108 -- , benchIO "concat" K.concat K.sourceUnfoldrM
111 [ benchIO "filter-even" K.filterEven K.sourceUnfoldrM
112 , benchIO "filter-all-out" K.filterAllOut K.sourceUnfoldrM
113 , benchIO "filter-all-in" K.filterAllIn K.sourceUnfoldrM
114 , benchIO "take-all" K.takeAll K.sourceUnfoldrM
115 , benchIO "takeWhile-true" K.takeWhileTrue K.sourceUnfoldrM
116 , benchIO "drop-all" K.dropAll K.sourceUnfoldrM
117 , benchIO "dropWhile-true" K.dropWhileTrue K.sourceUnfoldrM
119 , benchIO "zip" K.zip K.sourceUnfoldrM
121 [ benchIO "mapM" K.composeMapM K.sourceUnfoldrM
122 , benchIO "map-with-all-in-filter" K.composeMapAllInFilter K.sourceUnfoldrM
123 , benchIO "all-in-filters" K.composeAllInFilters K.sourceUnfoldrM
124 , benchIO "all-out-filters" K.composeAllOutFilters K.sourceUnfoldrM
126 -- Scaling with same operation in sequence
127 , bgroup "compose-scaling"
128 [ benchIO "1" (K.composeScaling 1) K.sourceUnfoldrM
129 , benchIO "2" (K.composeScaling 2) K.sourceUnfoldrM
130 , benchIO "3" (K.composeScaling 3) K.sourceUnfoldrM
131 , benchIO "4" (K.composeScaling 4) K.sourceUnfoldrM
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list