symbian-qemu-0.9.1-12/python-2.6.1/Tools/pybench/Calls.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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])