Home | History | Annotate | Download | only in pybench
      1 from pybench import Test
      2 
      3 class PythonFunctionCalls(Test):
      4 
      5     version = 2.0
      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 xrange(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 xrange(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 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)
    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 xrange(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 = cmp
    182         f3 = range
    183 
    184         # do calls

    185         for i in xrange(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 = range
    283         f3 = range
    284 
    285         # do calls

    286         for i in xrange(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 xrange(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 xrange(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 xrange(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 xrange(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])
    561