~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Tools/pybench/Calls.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from pybench import Test
 
2
 
 
3
class PythonFunctionCalls(Test):
 
4
 
 
5
    version = 2.1
 
6
    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
 
27
        for i in range(self.rounds):
 
28
 
 
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
 
107
        for i in range(self.rounds):
 
108
            pass
 
109
 
 
110
###
 
111
 
 
112
class ComplexPythonFunctionCalls(Test):
 
113
 
 
114
    version = 2.0
 
115
    operations = 4*5
 
116
    rounds = 100000
 
117
 
 
118
    def test(self):
 
119
 
 
120
        # define functions
 
121
        def f(a,b,c,d=1,e=2,f=3):
 
122
            return f
 
123
 
 
124
        args = 1,2
 
125
        kwargs = dict(c=3,d=4,e=5)
 
126
 
 
127
        # do calls
 
128
        for i in range(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)
 
133
 
 
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)
 
138
 
 
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)
 
143
 
 
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)
 
148
 
 
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)
 
153
 
 
154
 
 
155
    def calibrate(self):
 
156
 
 
157
        # define functions
 
158
        def f(a,b,c,d=1,e=2,f=3):
 
159
            return f
 
160
 
 
161
        args = 1,2
 
162
        kwargs = dict(c=3,d=4,e=5)
 
163
 
 
164
        # do calls
 
165
        for i in range(self.rounds):
 
166
            pass
 
167
 
 
168
###
 
169
 
 
170
class BuiltinFunctionCalls(Test):
 
171
 
 
172
    version = 2.0
 
173
    operations = 5*(2+5+5+5)
 
174
    rounds = 60000
 
175
 
 
176
    def test(self):
 
177
 
 
178
        # localize functions
 
179
        f0 = globals
 
180
        f1 = hash
 
181
        f2 = divmod
 
182
        f3 = max
 
183
 
 
184
        # do calls
 
185
        for i in range(self.rounds):
 
186
 
 
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)
 
204
 
 
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)
 
222
 
 
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)
 
240
 
 
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)
 
258
 
 
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)
 
276
 
 
277
    def calibrate(self):
 
278
 
 
279
        # localize functions
 
280
        f0 = dir
 
281
        f1 = hash
 
282
        f2 = divmod
 
283
        f3 = max
 
284
 
 
285
        # do calls
 
286
        for i in range(self.rounds):
 
287
            pass
 
288
 
 
289
###
 
290
 
 
291
class PythonMethodCalls(Test):
 
292
 
 
293
    version = 2.0
 
294
    operations = 5*(6 + 5 + 4)
 
295
    rounds = 30000
 
296
 
 
297
    def test(self):
 
298
 
 
299
        class c:
 
300
 
 
301
            x = 2
 
302
            s = 'string'
 
303
 
 
304
            def f(self):
 
305
 
 
306
                return self.x
 
307
 
 
308
            def j(self,a,b):
 
309
 
 
310
                self.y = a
 
311
                self.t = b
 
312
                return self.y
 
313
 
 
314
            def k(self,a,b,c=3):
 
315
 
 
316
                self.y = a
 
317
                self.s = b
 
318
                self.t = c
 
319
 
 
320
        o = c()
 
321
 
 
322
        for i in range(self.rounds):
 
323
 
 
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)
 
339
 
 
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)
 
355
 
 
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)
 
371
 
 
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)
 
387
 
 
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)
 
403
 
 
404
    def calibrate(self):
 
405
 
 
406
        class c:
 
407
 
 
408
            x = 2
 
409
            s = 'string'
 
410
 
 
411
            def f(self):
 
412
 
 
413
                return self.x
 
414
 
 
415
            def j(self,a,b):
 
416
 
 
417
                self.y = a
 
418
                self.t = b
 
419
 
 
420
            def k(self,a,b,c=3):
 
421
 
 
422
                self.y = a
 
423
                self.s = b
 
424
                self.t = c
 
425
 
 
426
        o = c
 
427
 
 
428
        for i in range(self.rounds):
 
429
            pass
 
430
 
 
431
###
 
432
 
 
433
class Recursion(Test):
 
434
 
 
435
    version = 2.0
 
436
    operations = 5
 
437
    rounds = 100000
 
438
 
 
439
    def test(self):
 
440
 
 
441
        global f
 
442
 
 
443
        def f(x):
 
444
 
 
445
            if x > 1:
 
446
                return f(x-1)
 
447
            return 1
 
448
 
 
449
        for i in range(self.rounds):
 
450
            f(10)
 
451
            f(10)
 
452
            f(10)
 
453
            f(10)
 
454
            f(10)
 
455
 
 
456
    def calibrate(self):
 
457
 
 
458
        global f
 
459
 
 
460
        def f(x):
 
461
 
 
462
            if x > 0:
 
463
                return f(x-1)
 
464
            return 1
 
465
 
 
466
        for i in range(self.rounds):
 
467
            pass
 
468
 
 
469
 
 
470
### Test to make Fredrik happy...
 
471
 
 
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
 
481
 
 
482
# define functions
 
483
def f():
 
484
    pass
 
485
 
 
486
def f1(x):
 
487
    pass
 
488
 
 
489
def g(a,b,c):
 
490
    return a,b,c
 
491
 
 
492
def h(a,b,c,d=1,e=2,f=3):
 
493
    return d,e,f
 
494
 
 
495
i = 1
 
496
"""
 
497
        test = """\
 
498
f()
 
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)
 
509
 
 
510
f()
 
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)
 
521
 
 
522
f()
 
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)
 
533
 
 
534
f()
 
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)
 
545
 
 
546
f()
 
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)
 
557
"""
 
558
 
 
559
        timeit.main(['-s', setup,
 
560
                     test])