blob: cfe07152639b565f3f1f97f47663ded6788c6e96 [file] [log] [blame]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001from pybench import Test
2
3class PythonFunctionCalls(Test):
4
Thomas Wouters0e3f5912006-08-11 14:57:12 +00005 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00006 operations = 5*(1+4+4+2)
7 rounds = 60000
8
9 def test(self):
10
11 global f,f1,g,h
12
13 # define functions
14 def f():
15 pass
16
17 def f1(x):
18 pass
19
20 def g(a,b,c):
21 return a,b,c
22
23 def h(a,b,c,d=1,e=2,f=3):
24 return d,e,f
25
26 # do calls
Guido van Rossum805365e2007-05-07 22:24:25 +000027 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000028
29 f()
30 f1(i)
31 f1(i)
32 f1(i)
33 f1(i)
34 g(i,i,i)
35 g(i,i,i)
36 g(i,i,i)
37 g(i,i,i)
38 h(i,i,3,i,i)
39 h(i,i,i,2,i,3)
40
41 f()
42 f1(i)
43 f1(i)
44 f1(i)
45 f1(i)
46 g(i,i,i)
47 g(i,i,i)
48 g(i,i,i)
49 g(i,i,i)
50 h(i,i,3,i,i)
51 h(i,i,i,2,i,3)
52
53 f()
54 f1(i)
55 f1(i)
56 f1(i)
57 f1(i)
58 g(i,i,i)
59 g(i,i,i)
60 g(i,i,i)
61 g(i,i,i)
62 h(i,i,3,i,i)
63 h(i,i,i,2,i,3)
64
65 f()
66 f1(i)
67 f1(i)
68 f1(i)
69 f1(i)
70 g(i,i,i)
71 g(i,i,i)
72 g(i,i,i)
73 g(i,i,i)
74 h(i,i,3,i,i)
75 h(i,i,i,2,i,3)
76
77 f()
78 f1(i)
79 f1(i)
80 f1(i)
81 f1(i)
82 g(i,i,i)
83 g(i,i,i)
84 g(i,i,i)
85 g(i,i,i)
86 h(i,i,3,i,i)
87 h(i,i,i,2,i,3)
88
89 def calibrate(self):
90
91 global f,f1,g,h
92
93 # define functions
94 def f():
95 pass
96
97 def f1(x):
98 pass
99
100 def g(a,b,c):
101 return a,b,c
102
103 def h(a,b,c,d=1,e=2,f=3):
104 return d,e,f
105
106 # do calls
Guido van Rossum805365e2007-05-07 22:24:25 +0000107 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000108 pass
109
110###
111
112class BuiltinFunctionCalls(Test):
113
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000114 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000115 operations = 5*(2+5+5+5)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000116 rounds = 60000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000117
118 def test(self):
119
120 # localize functions
121 f0 = globals
122 f1 = hash
123 f2 = cmp
124 f3 = range
125
126 # do calls
Guido van Rossum805365e2007-05-07 22:24:25 +0000127 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000128
129 f0()
130 f0()
131 f1(i)
132 f1(i)
133 f1(i)
134 f1(i)
135 f1(i)
136 f2(1,2)
137 f2(1,2)
138 f2(1,2)
139 f2(1,2)
140 f2(1,2)
141 f3(1,3,2)
142 f3(1,3,2)
143 f3(1,3,2)
144 f3(1,3,2)
145 f3(1,3,2)
146
147 f0()
148 f0()
149 f1(i)
150 f1(i)
151 f1(i)
152 f1(i)
153 f1(i)
154 f2(1,2)
155 f2(1,2)
156 f2(1,2)
157 f2(1,2)
158 f2(1,2)
159 f3(1,3,2)
160 f3(1,3,2)
161 f3(1,3,2)
162 f3(1,3,2)
163 f3(1,3,2)
164
165 f0()
166 f0()
167 f1(i)
168 f1(i)
169 f1(i)
170 f1(i)
171 f1(i)
172 f2(1,2)
173 f2(1,2)
174 f2(1,2)
175 f2(1,2)
176 f2(1,2)
177 f3(1,3,2)
178 f3(1,3,2)
179 f3(1,3,2)
180 f3(1,3,2)
181 f3(1,3,2)
182
183 f0()
184 f0()
185 f1(i)
186 f1(i)
187 f1(i)
188 f1(i)
189 f1(i)
190 f2(1,2)
191 f2(1,2)
192 f2(1,2)
193 f2(1,2)
194 f2(1,2)
195 f3(1,3,2)
196 f3(1,3,2)
197 f3(1,3,2)
198 f3(1,3,2)
199 f3(1,3,2)
200
201 f0()
202 f0()
203 f1(i)
204 f1(i)
205 f1(i)
206 f1(i)
207 f1(i)
208 f2(1,2)
209 f2(1,2)
210 f2(1,2)
211 f2(1,2)
212 f2(1,2)
213 f3(1,3,2)
214 f3(1,3,2)
215 f3(1,3,2)
216 f3(1,3,2)
217 f3(1,3,2)
218
219 def calibrate(self):
220
221 # localize functions
222 f0 = dir
223 f1 = hash
224 f2 = range
225 f3 = range
226
227 # do calls
Guido van Rossum805365e2007-05-07 22:24:25 +0000228 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000229 pass
230
231###
232
233class PythonMethodCalls(Test):
234
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000235 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000236 operations = 5*(6 + 5 + 4)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000237 rounds = 30000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000238
239 def test(self):
240
241 class c:
242
243 x = 2
244 s = 'string'
245
246 def f(self):
247
248 return self.x
249
250 def j(self,a,b):
251
252 self.y = a
253 self.t = b
254 return self.y
255
256 def k(self,a,b,c=3):
257
258 self.y = a
259 self.s = b
260 self.t = c
261
262 o = c()
263
Guido van Rossum805365e2007-05-07 22:24:25 +0000264 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000265
266 o.f()
267 o.f()
268 o.f()
269 o.f()
270 o.f()
271 o.f()
272 o.j(i,i)
273 o.j(i,i)
274 o.j(i,2)
275 o.j(i,2)
276 o.j(2,2)
277 o.k(i,i)
278 o.k(i,2)
279 o.k(i,2,3)
280 o.k(i,i,c=4)
281
282 o.f()
283 o.f()
284 o.f()
285 o.f()
286 o.f()
287 o.f()
288 o.j(i,i)
289 o.j(i,i)
290 o.j(i,2)
291 o.j(i,2)
292 o.j(2,2)
293 o.k(i,i)
294 o.k(i,2)
295 o.k(i,2,3)
296 o.k(i,i,c=4)
297
298 o.f()
299 o.f()
300 o.f()
301 o.f()
302 o.f()
303 o.f()
304 o.j(i,i)
305 o.j(i,i)
306 o.j(i,2)
307 o.j(i,2)
308 o.j(2,2)
309 o.k(i,i)
310 o.k(i,2)
311 o.k(i,2,3)
312 o.k(i,i,c=4)
313
314 o.f()
315 o.f()
316 o.f()
317 o.f()
318 o.f()
319 o.f()
320 o.j(i,i)
321 o.j(i,i)
322 o.j(i,2)
323 o.j(i,2)
324 o.j(2,2)
325 o.k(i,i)
326 o.k(i,2)
327 o.k(i,2,3)
328 o.k(i,i,c=4)
329
330 o.f()
331 o.f()
332 o.f()
333 o.f()
334 o.f()
335 o.f()
336 o.j(i,i)
337 o.j(i,i)
338 o.j(i,2)
339 o.j(i,2)
340 o.j(2,2)
341 o.k(i,i)
342 o.k(i,2)
343 o.k(i,2,3)
344 o.k(i,i,c=4)
345
346 def calibrate(self):
347
348 class c:
349
350 x = 2
351 s = 'string'
352
353 def f(self):
354
355 return self.x
356
357 def j(self,a,b):
358
359 self.y = a
360 self.t = b
361
362 def k(self,a,b,c=3):
363
364 self.y = a
365 self.s = b
366 self.t = c
367
368 o = c
369
Guido van Rossum805365e2007-05-07 22:24:25 +0000370 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000371 pass
372
373###
374
375class Recursion(Test):
376
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000377 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000378 operations = 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000379 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000380
381 def test(self):
382
383 global f
384
385 def f(x):
386
387 if x > 1:
388 return f(x-1)
389 return 1
390
Guido van Rossum805365e2007-05-07 22:24:25 +0000391 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000392 f(10)
393 f(10)
394 f(10)
395 f(10)
396 f(10)
397
398 def calibrate(self):
399
400 global f
401
402 def f(x):
403
404 if x > 0:
405 return f(x-1)
406 return 1
407
Guido van Rossum805365e2007-05-07 22:24:25 +0000408 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000409 pass
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000410
411
412### Test to make Fredrik happy...
413
414if __name__ == '__main__':
415 import timeit
416 if 0:
417 timeit.TestClass = PythonFunctionCalls
418 timeit.main(['-s', 'test = TestClass(); test.rounds = 1000',
419 'test.test()'])
420 else:
421 setup = """\
422global f,f1,g,h
423
424# define functions
425def f():
426 pass
427
428def f1(x):
429 pass
430
431def g(a,b,c):
432 return a,b,c
433
434def h(a,b,c,d=1,e=2,f=3):
435 return d,e,f
436
437i = 1
438"""
439 test = """\
440f()
441f1(i)
442f1(i)
443f1(i)
444f1(i)
445g(i,i,i)
446g(i,i,i)
447g(i,i,i)
448g(i,i,i)
449h(i,i,3,i,i)
450h(i,i,i,2,i,3)
451
452f()
453f1(i)
454f1(i)
455f1(i)
456f1(i)
457g(i,i,i)
458g(i,i,i)
459g(i,i,i)
460g(i,i,i)
461h(i,i,3,i,i)
462h(i,i,i,2,i,3)
463
464f()
465f1(i)
466f1(i)
467f1(i)
468f1(i)
469g(i,i,i)
470g(i,i,i)
471g(i,i,i)
472g(i,i,i)
473h(i,i,3,i,i)
474h(i,i,i,2,i,3)
475
476f()
477f1(i)
478f1(i)
479f1(i)
480f1(i)
481g(i,i,i)
482g(i,i,i)
483g(i,i,i)
484g(i,i,i)
485h(i,i,3,i,i)
486h(i,i,i,2,i,3)
487
488f()
489f1(i)
490f1(i)
491f1(i)
492f1(i)
493g(i,i,i)
494g(i,i,i)
495g(i,i,i)
496g(i,i,i)
497h(i,i,3,i,i)
498h(i,i,i,2,i,3)
499"""
500
501 timeit.main(['-s', setup,
502 test])