Fix issue number in comment.
[python.git] / Tools / pybench / Calls.py
blobe27798b3038af88d5dd40c3ab08fd03b116c1184
1 from pybench import Test
3 class PythonFunctionCalls(Test):
5 version = 2.0
6 operations = 5*(1+4+4+2)
7 rounds = 60000
9 def test(self):
11 global f,f1,g,h
13 # define functions
14 def f():
15 pass
17 def f1(x):
18 pass
20 def g(a,b,c):
21 return a,b,c
23 def h(a,b,c,d=1,e=2,f=3):
24 return d,e,f
26 # do calls
27 for i in xrange(self.rounds):
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)
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)
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)
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)
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)
89 def calibrate(self):
91 global f,f1,g,h
93 # define functions
94 def f():
95 pass
97 def f1(x):
98 pass
100 def g(a,b,c):
101 return a,b,c
103 def h(a,b,c,d=1,e=2,f=3):
104 return d,e,f
106 # do calls
107 for i in xrange(self.rounds):
108 pass
112 class ComplexPythonFunctionCalls(Test):
114 version = 2.0
115 operations = 4*5
116 rounds = 100000
118 def test(self):
120 # define functions
121 def f(a,b,c,d=1,e=2,f=3):
122 return f
124 args = 1,2
125 kwargs = dict(c=3,d=4,e=5)
127 # do calls
128 for i in xrange(self.rounds):
129 f(a=i,b=i,c=i)
130 f(f=i,e=i,d=i,c=2,b=i,a=3)
131 f(1,b=i,**kwargs)
132 f(*args,**kwargs)
134 f(a=i,b=i,c=i)
135 f(f=i,e=i,d=i,c=2,b=i,a=3)
136 f(1,b=i,**kwargs)
137 f(*args,**kwargs)
139 f(a=i,b=i,c=i)
140 f(f=i,e=i,d=i,c=2,b=i,a=3)
141 f(1,b=i,**kwargs)
142 f(*args,**kwargs)
144 f(a=i,b=i,c=i)
145 f(f=i,e=i,d=i,c=2,b=i,a=3)
146 f(1,b=i,**kwargs)
147 f(*args,**kwargs)
149 f(a=i,b=i,c=i)
150 f(f=i,e=i,d=i,c=2,b=i,a=3)
151 f(1,b=i,**kwargs)
152 f(*args,**kwargs)
155 def calibrate(self):
157 # define functions
158 def f(a,b,c,d=1,e=2,f=3):
159 return f
161 args = 1,2
162 kwargs = dict(c=3,d=4,e=5)
164 # do calls
165 for i in xrange(self.rounds):
166 pass
170 class BuiltinFunctionCalls(Test):
172 version = 2.0
173 operations = 5*(2+5+5+5)
174 rounds = 60000
176 def test(self):
178 # localize functions
179 f0 = globals
180 f1 = hash
181 f2 = cmp
182 f3 = range
184 # do calls
185 for i in xrange(self.rounds):
187 f0()
188 f0()
189 f1(i)
190 f1(i)
191 f1(i)
192 f1(i)
193 f1(i)
194 f2(1,2)
195 f2(1,2)
196 f2(1,2)
197 f2(1,2)
198 f2(1,2)
199 f3(1,3,2)
200 f3(1,3,2)
201 f3(1,3,2)
202 f3(1,3,2)
203 f3(1,3,2)
205 f0()
206 f0()
207 f1(i)
208 f1(i)
209 f1(i)
210 f1(i)
211 f1(i)
212 f2(1,2)
213 f2(1,2)
214 f2(1,2)
215 f2(1,2)
216 f2(1,2)
217 f3(1,3,2)
218 f3(1,3,2)
219 f3(1,3,2)
220 f3(1,3,2)
221 f3(1,3,2)
223 f0()
224 f0()
225 f1(i)
226 f1(i)
227 f1(i)
228 f1(i)
229 f1(i)
230 f2(1,2)
231 f2(1,2)
232 f2(1,2)
233 f2(1,2)
234 f2(1,2)
235 f3(1,3,2)
236 f3(1,3,2)
237 f3(1,3,2)
238 f3(1,3,2)
239 f3(1,3,2)
241 f0()
242 f0()
243 f1(i)
244 f1(i)
245 f1(i)
246 f1(i)
247 f1(i)
248 f2(1,2)
249 f2(1,2)
250 f2(1,2)
251 f2(1,2)
252 f2(1,2)
253 f3(1,3,2)
254 f3(1,3,2)
255 f3(1,3,2)
256 f3(1,3,2)
257 f3(1,3,2)
259 f0()
260 f0()
261 f1(i)
262 f1(i)
263 f1(i)
264 f1(i)
265 f1(i)
266 f2(1,2)
267 f2(1,2)
268 f2(1,2)
269 f2(1,2)
270 f2(1,2)
271 f3(1,3,2)
272 f3(1,3,2)
273 f3(1,3,2)
274 f3(1,3,2)
275 f3(1,3,2)
277 def calibrate(self):
279 # localize functions
280 f0 = dir
281 f1 = hash
282 f2 = range
283 f3 = range
285 # do calls
286 for i in xrange(self.rounds):
287 pass
291 class PythonMethodCalls(Test):
293 version = 2.0
294 operations = 5*(6 + 5 + 4)
295 rounds = 30000
297 def test(self):
299 class c:
301 x = 2
302 s = 'string'
304 def f(self):
306 return self.x
308 def j(self,a,b):
310 self.y = a
311 self.t = b
312 return self.y
314 def k(self,a,b,c=3):
316 self.y = a
317 self.s = b
318 self.t = c
320 o = c()
322 for i in xrange(self.rounds):
324 o.f()
325 o.f()
326 o.f()
327 o.f()
328 o.f()
329 o.f()
330 o.j(i,i)
331 o.j(i,i)
332 o.j(i,2)
333 o.j(i,2)
334 o.j(2,2)
335 o.k(i,i)
336 o.k(i,2)
337 o.k(i,2,3)
338 o.k(i,i,c=4)
340 o.f()
341 o.f()
342 o.f()
343 o.f()
344 o.f()
345 o.f()
346 o.j(i,i)
347 o.j(i,i)
348 o.j(i,2)
349 o.j(i,2)
350 o.j(2,2)
351 o.k(i,i)
352 o.k(i,2)
353 o.k(i,2,3)
354 o.k(i,i,c=4)
356 o.f()
357 o.f()
358 o.f()
359 o.f()
360 o.f()
361 o.f()
362 o.j(i,i)
363 o.j(i,i)
364 o.j(i,2)
365 o.j(i,2)
366 o.j(2,2)
367 o.k(i,i)
368 o.k(i,2)
369 o.k(i,2,3)
370 o.k(i,i,c=4)
372 o.f()
373 o.f()
374 o.f()
375 o.f()
376 o.f()
377 o.f()
378 o.j(i,i)
379 o.j(i,i)
380 o.j(i,2)
381 o.j(i,2)
382 o.j(2,2)
383 o.k(i,i)
384 o.k(i,2)
385 o.k(i,2,3)
386 o.k(i,i,c=4)
388 o.f()
389 o.f()
390 o.f()
391 o.f()
392 o.f()
393 o.f()
394 o.j(i,i)
395 o.j(i,i)
396 o.j(i,2)
397 o.j(i,2)
398 o.j(2,2)
399 o.k(i,i)
400 o.k(i,2)
401 o.k(i,2,3)
402 o.k(i,i,c=4)
404 def calibrate(self):
406 class c:
408 x = 2
409 s = 'string'
411 def f(self):
413 return self.x
415 def j(self,a,b):
417 self.y = a
418 self.t = b
420 def k(self,a,b,c=3):
422 self.y = a
423 self.s = b
424 self.t = c
426 o = c
428 for i in xrange(self.rounds):
429 pass
433 class Recursion(Test):
435 version = 2.0
436 operations = 5
437 rounds = 100000
439 def test(self):
441 global f
443 def f(x):
445 if x > 1:
446 return f(x-1)
447 return 1
449 for i in xrange(self.rounds):
450 f(10)
451 f(10)
452 f(10)
453 f(10)
454 f(10)
456 def calibrate(self):
458 global f
460 def f(x):
462 if x > 0:
463 return f(x-1)
464 return 1
466 for i in xrange(self.rounds):
467 pass
470 ### Test to make Fredrik happy...
472 if __name__ == '__main__':
473 import timeit
474 if 0:
475 timeit.TestClass = PythonFunctionCalls
476 timeit.main(['-s', 'test = TestClass(); test.rounds = 1000',
477 'test.test()'])
478 else:
479 setup = """\
480 global f,f1,g,h
482 # define functions
483 def f():
484 pass
486 def f1(x):
487 pass
489 def g(a,b,c):
490 return a,b,c
492 def h(a,b,c,d=1,e=2,f=3):
493 return d,e,f
495 i = 1
497 test = """\
499 f1(i)
500 f1(i)
501 f1(i)
502 f1(i)
503 g(i,i,i)
504 g(i,i,i)
505 g(i,i,i)
506 g(i,i,i)
507 h(i,i,3,i,i)
508 h(i,i,i,2,i,3)
511 f1(i)
512 f1(i)
513 f1(i)
514 f1(i)
515 g(i,i,i)
516 g(i,i,i)
517 g(i,i,i)
518 g(i,i,i)
519 h(i,i,3,i,i)
520 h(i,i,i,2,i,3)
523 f1(i)
524 f1(i)
525 f1(i)
526 f1(i)
527 g(i,i,i)
528 g(i,i,i)
529 g(i,i,i)
530 g(i,i,i)
531 h(i,i,3,i,i)
532 h(i,i,i,2,i,3)
535 f1(i)
536 f1(i)
537 f1(i)
538 f1(i)
539 g(i,i,i)
540 g(i,i,i)
541 g(i,i,i)
542 g(i,i,i)
543 h(i,i,3,i,i)
544 h(i,i,i,2,i,3)
547 f1(i)
548 f1(i)
549 f1(i)
550 f1(i)
551 g(i,i,i)
552 g(i,i,i)
553 g(i,i,i)
554 g(i,i,i)
555 h(i,i,3,i,i)
556 h(i,i,i,2,i,3)
559 timeit.main(['-s', setup,
560 test])