@@ -18,6 +18,11 @@ data Conser = forall f. NFData (f Int) => Conser String (Int -> f Int)
18
18
data Replicator = forall f . NFData (f Int ) => Replicator String (Int -> Int -> f Int )
19
19
data Indexing = forall f . NFData (f Int ) => Indexing String (f Int ) (f Int -> Int -> Int )
20
20
data Length = forall f . NFData (f Int ) => Length String (f Int ) (f Int -> Int )
21
+ data Min = forall f . NFData (f Int ) => Min String (f Int ) (f Int -> Int )
22
+ data Max = forall f . NFData (f Int ) => Max String (f Int ) (f Int -> Int )
23
+ data Sort = forall f . NFData (f Int ) => Sort String (f Int ) (f Int -> f Int )
24
+ data RemoveElement = forall f . NFData (f Int ) => RemoveElement String (f Int ) ((Int -> Bool ) -> f Int -> f Int )
25
+ data RemoveByIndex = forall f . NFData (f Int ) => RemoveByIndex String (f Int ) ((Int -> Int -> Bool ) -> f Int -> f Int )
21
26
22
27
main :: IO ()
23
28
main = do
@@ -62,6 +67,40 @@ main = do
62
67
, Length " Data.Vector.Unboxed" uvector (UV. length )
63
68
, Length " Data.Sequence" seqd (S. length )
64
69
])
70
+ , bgroup
71
+ " Min"
72
+ (mins
73
+ [ Min " Data.List" list (L. minimum )
74
+ , Min " Data.Vector" vector (V. minimum )
75
+ , Min " Data.Vector.Unboxed" uvector (UV. minimum )
76
+ ])
77
+ , bgroup
78
+ " Max"
79
+ (maxs
80
+ [ Max " Data.List" list (L. maximum )
81
+ , Max " Data.Vector" vector (V. maximum )
82
+ , Max " Data.Vector.Unboxed" uvector (UV. maximum )
83
+ ])
84
+ , bgroup
85
+ " Sort"
86
+ (sorts
87
+ [ Sort " Data.List" list (L. sort)
88
+ , Sort " Data.Sequence" seqd (S. sort)
89
+ ])
90
+ , bgroup
91
+ " Remove Element"
92
+ (removeElems
93
+ [ RemoveElement " Data.List" list (L. filter )
94
+ , RemoveElement " Data.Vector" vector (V. filter )
95
+ , RemoveElement " Data.Vector.Unboxed" uvector (UV. filter )
96
+ , RemoveElement " Data.Sequence" seqd (S. filter )
97
+ ])
98
+ , bgroup
99
+ " Remove By Index"
100
+ (removeByIndexes
101
+ [ RemoveByIndex " Data.Vector" vector (V. ifilter)
102
+ , RemoveByIndex " Data.Vector.Unboxed" uvector (UV. ifilter)
103
+ ])
65
104
]
66
105
where
67
106
conses funcs =
@@ -83,6 +122,29 @@ main = do
83
122
[ bench (title ++ " :10000" ) $ nf (\ x -> func x) payload
84
123
| Length title payload func <- funcs
85
124
]
125
+ mins funcs =
126
+ [ bench (title ++ " :10000" ) $ nf (\ x -> func x) payload
127
+ | Min title payload func <- funcs
128
+ ]
129
+ maxs funcs =
130
+ [ bench (title ++ " :10000" ) $ nf (\ x -> func x) payload
131
+ | Max title payload func <- funcs
132
+ ]
133
+ sorts funcs =
134
+ [ bench (title ++ " :10000" ) $ nf (\ x -> func x) payload
135
+ | Sort title payload func <- funcs
136
+ ]
137
+ removeElems funcs =
138
+ [ bench (title ++ " :" ++ show relem) $ nf (\ x -> func (/= relem) x) payload
139
+ | relem <- [1 , 100 , 1000 , 10000 :: Int ]
140
+ , RemoveElement title payload func <- funcs
141
+ ]
142
+ removeByIndexes funcs =
143
+ [ bench (title ++ " :" ++ show relem) $ nf (\ x -> func (\ index _ -> index /= relem) x) payload
144
+ | relem <- [1 , 100 , 1000 , 10000 :: Int ]
145
+ , RemoveByIndex title payload func <- funcs
146
+ ]
147
+
86
148
sampleList :: IO [Int ]
87
149
sampleList = evaluate $ force [1 .. 10005 ]
88
150
sampleVector :: IO (V. Vector Int )
0 commit comments