Skip to content

Commit 406abfd

Browse files
authored
Merge pull request typeable#4 from psibi/more-benchmark
More benchmark
2 parents 0dbf91e + 9c23fbc commit 406abfd

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

Time.hs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ data Conser = forall f. NFData (f Int) => Conser String (Int -> f Int)
1818
data Replicator = forall f. NFData (f Int) => Replicator String (Int -> Int -> f Int)
1919
data Indexing = forall f. NFData (f Int) => Indexing String (f Int) (f Int -> Int -> Int)
2020
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)
2126

2227
main :: IO ()
2328
main = do
@@ -62,6 +67,40 @@ main = do
6267
, Length "Data.Vector.Unboxed" uvector (UV.length)
6368
, Length "Data.Sequence" seqd (S.length)
6469
])
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+
])
65104
]
66105
where
67106
conses funcs =
@@ -83,6 +122,29 @@ main = do
83122
[ bench (title ++ ":10000") $ nf (\x -> func x) payload
84123
| Length title payload func <- funcs
85124
]
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+
86148
sampleList :: IO [Int]
87149
sampleList = evaluate $ force [1 .. 10005]
88150
sampleVector :: IO (V.Vector Int)

0 commit comments

Comments
 (0)