/Tools/pybench/Calls.py

http://unladen-swallow.googlecode.com/ · Python · 560 lines · 445 code · 98 blank · 17 comment · 15 complexity · 02a56911a2c018b83e438340a8ff4e17 MD5 · raw file

  1. from pybench import Test
  2. class PythonFunctionCalls(Test):
  3. version = 2.0
  4. operations = 5*(1+4+4+2)
  5. rounds = 60000
  6. def test(self):
  7. global f,f1,g,h
  8. # define functions
  9. def f():
  10. pass
  11. def f1(x):
  12. pass
  13. def g(a,b,c):
  14. return a,b,c
  15. def h(a,b,c,d=1,e=2,f=3):
  16. return d,e,f
  17. # do calls
  18. for i in xrange(self.rounds):
  19. f()
  20. f1(i)
  21. f1(i)
  22. f1(i)
  23. f1(i)
  24. g(i,i,i)
  25. g(i,i,i)
  26. g(i,i,i)
  27. g(i,i,i)
  28. h(i,i,3,i,i)
  29. h(i,i,i,2,i,3)
  30. f()
  31. f1(i)
  32. f1(i)
  33. f1(i)
  34. f1(i)
  35. g(i,i,i)
  36. g(i,i,i)
  37. g(i,i,i)
  38. g(i,i,i)
  39. h(i,i,3,i,i)
  40. 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)
  52. f()
  53. f1(i)
  54. f1(i)
  55. f1(i)
  56. f1(i)
  57. g(i,i,i)
  58. g(i,i,i)
  59. g(i,i,i)
  60. g(i,i,i)
  61. h(i,i,3,i,i)
  62. h(i,i,i,2,i,3)
  63. f()
  64. f1(i)
  65. f1(i)
  66. f1(i)
  67. f1(i)
  68. g(i,i,i)
  69. g(i,i,i)
  70. g(i,i,i)
  71. g(i,i,i)
  72. h(i,i,3,i,i)
  73. h(i,i,i,2,i,3)
  74. def calibrate(self):
  75. global f,f1,g,h
  76. # define functions
  77. def f():
  78. pass
  79. def f1(x):
  80. pass
  81. def g(a,b,c):
  82. return a,b,c
  83. def h(a,b,c,d=1,e=2,f=3):
  84. return d,e,f
  85. # do calls
  86. for i in xrange(self.rounds):
  87. pass
  88. ###
  89. class ComplexPythonFunctionCalls(Test):
  90. version = 2.0
  91. operations = 4*5
  92. rounds = 100000
  93. def test(self):
  94. # define functions
  95. def f(a,b,c,d=1,e=2,f=3):
  96. return f
  97. args = 1,2
  98. kwargs = dict(c=3,d=4,e=5)
  99. # do calls
  100. for i in xrange(self.rounds):
  101. f(a=i,b=i,c=i)
  102. f(f=i,e=i,d=i,c=2,b=i,a=3)
  103. f(1,b=i,**kwargs)
  104. f(*args,**kwargs)
  105. f(a=i,b=i,c=i)
  106. f(f=i,e=i,d=i,c=2,b=i,a=3)
  107. f(1,b=i,**kwargs)
  108. f(*args,**kwargs)
  109. f(a=i,b=i,c=i)
  110. f(f=i,e=i,d=i,c=2,b=i,a=3)
  111. f(1,b=i,**kwargs)
  112. f(*args,**kwargs)
  113. f(a=i,b=i,c=i)
  114. f(f=i,e=i,d=i,c=2,b=i,a=3)
  115. f(1,b=i,**kwargs)
  116. f(*args,**kwargs)
  117. f(a=i,b=i,c=i)
  118. f(f=i,e=i,d=i,c=2,b=i,a=3)
  119. f(1,b=i,**kwargs)
  120. f(*args,**kwargs)
  121. def calibrate(self):
  122. # define functions
  123. def f(a,b,c,d=1,e=2,f=3):
  124. return f
  125. args = 1,2
  126. kwargs = dict(c=3,d=4,e=5)
  127. # do calls
  128. for i in xrange(self.rounds):
  129. pass
  130. ###
  131. class BuiltinFunctionCalls(Test):
  132. version = 2.0
  133. operations = 5*(2+5+5+5)
  134. rounds = 60000
  135. def test(self):
  136. # localize functions
  137. f0 = globals
  138. f1 = hash
  139. f2 = cmp
  140. f3 = range
  141. # do calls
  142. for i in xrange(self.rounds):
  143. f0()
  144. f0()
  145. f1(i)
  146. f1(i)
  147. f1(i)
  148. f1(i)
  149. f1(i)
  150. f2(1,2)
  151. f2(1,2)
  152. f2(1,2)
  153. f2(1,2)
  154. f2(1,2)
  155. f3(1,3,2)
  156. f3(1,3,2)
  157. f3(1,3,2)
  158. f3(1,3,2)
  159. f3(1,3,2)
  160. f0()
  161. f0()
  162. f1(i)
  163. f1(i)
  164. f1(i)
  165. f1(i)
  166. f1(i)
  167. f2(1,2)
  168. f2(1,2)
  169. f2(1,2)
  170. f2(1,2)
  171. f2(1,2)
  172. f3(1,3,2)
  173. f3(1,3,2)
  174. f3(1,3,2)
  175. f3(1,3,2)
  176. f3(1,3,2)
  177. f0()
  178. f0()
  179. f1(i)
  180. f1(i)
  181. f1(i)
  182. f1(i)
  183. f1(i)
  184. f2(1,2)
  185. f2(1,2)
  186. f2(1,2)
  187. f2(1,2)
  188. f2(1,2)
  189. f3(1,3,2)
  190. f3(1,3,2)
  191. f3(1,3,2)
  192. f3(1,3,2)
  193. f3(1,3,2)
  194. f0()
  195. f0()
  196. f1(i)
  197. f1(i)
  198. f1(i)
  199. f1(i)
  200. f1(i)
  201. f2(1,2)
  202. f2(1,2)
  203. f2(1,2)
  204. f2(1,2)
  205. f2(1,2)
  206. f3(1,3,2)
  207. f3(1,3,2)
  208. f3(1,3,2)
  209. f3(1,3,2)
  210. f3(1,3,2)
  211. f0()
  212. f0()
  213. f1(i)
  214. f1(i)
  215. f1(i)
  216. f1(i)
  217. f1(i)
  218. f2(1,2)
  219. f2(1,2)
  220. f2(1,2)
  221. f2(1,2)
  222. f2(1,2)
  223. f3(1,3,2)
  224. f3(1,3,2)
  225. f3(1,3,2)
  226. f3(1,3,2)
  227. f3(1,3,2)
  228. def calibrate(self):
  229. # localize functions
  230. f0 = dir
  231. f1 = hash
  232. f2 = range
  233. f3 = range
  234. # do calls
  235. for i in xrange(self.rounds):
  236. pass
  237. ###
  238. class PythonMethodCalls(Test):
  239. version = 2.0
  240. operations = 5*(6 + 5 + 4)
  241. rounds = 30000
  242. def test(self):
  243. class c:
  244. x = 2
  245. s = 'string'
  246. def f(self):
  247. return self.x
  248. def j(self,a,b):
  249. self.y = a
  250. self.t = b
  251. return self.y
  252. def k(self,a,b,c=3):
  253. self.y = a
  254. self.s = b
  255. self.t = c
  256. o = c()
  257. for i in xrange(self.rounds):
  258. o.f()
  259. o.f()
  260. o.f()
  261. o.f()
  262. o.f()
  263. o.f()
  264. o.j(i,i)
  265. o.j(i,i)
  266. o.j(i,2)
  267. o.j(i,2)
  268. o.j(2,2)
  269. o.k(i,i)
  270. o.k(i,2)
  271. o.k(i,2,3)
  272. o.k(i,i,c=4)
  273. o.f()
  274. o.f()
  275. o.f()
  276. o.f()
  277. o.f()
  278. o.f()
  279. o.j(i,i)
  280. o.j(i,i)
  281. o.j(i,2)
  282. o.j(i,2)
  283. o.j(2,2)
  284. o.k(i,i)
  285. o.k(i,2)
  286. o.k(i,2,3)
  287. o.k(i,i,c=4)
  288. o.f()
  289. o.f()
  290. o.f()
  291. o.f()
  292. o.f()
  293. o.f()
  294. o.j(i,i)
  295. o.j(i,i)
  296. o.j(i,2)
  297. o.j(i,2)
  298. o.j(2,2)
  299. o.k(i,i)
  300. o.k(i,2)
  301. o.k(i,2,3)
  302. o.k(i,i,c=4)
  303. o.f()
  304. o.f()
  305. o.f()
  306. o.f()
  307. o.f()
  308. o.f()
  309. o.j(i,i)
  310. o.j(i,i)
  311. o.j(i,2)
  312. o.j(i,2)
  313. o.j(2,2)
  314. o.k(i,i)
  315. o.k(i,2)
  316. o.k(i,2,3)
  317. o.k(i,i,c=4)
  318. o.f()
  319. o.f()
  320. o.f()
  321. o.f()
  322. o.f()
  323. o.f()
  324. o.j(i,i)
  325. o.j(i,i)
  326. o.j(i,2)
  327. o.j(i,2)
  328. o.j(2,2)
  329. o.k(i,i)
  330. o.k(i,2)
  331. o.k(i,2,3)
  332. o.k(i,i,c=4)
  333. def calibrate(self):
  334. class c:
  335. x = 2
  336. s = 'string'
  337. def f(self):
  338. return self.x
  339. def j(self,a,b):
  340. self.y = a
  341. self.t = b
  342. def k(self,a,b,c=3):
  343. self.y = a
  344. self.s = b
  345. self.t = c
  346. o = c
  347. for i in xrange(self.rounds):
  348. pass
  349. ###
  350. class Recursion(Test):
  351. version = 2.0
  352. operations = 5
  353. rounds = 100000
  354. def test(self):
  355. global f
  356. def f(x):
  357. if x > 1:
  358. return f(x-1)
  359. return 1
  360. for i in xrange(self.rounds):
  361. f(10)
  362. f(10)
  363. f(10)
  364. f(10)
  365. f(10)
  366. def calibrate(self):
  367. global f
  368. def f(x):
  369. if x > 0:
  370. return f(x-1)
  371. return 1
  372. for i in xrange(self.rounds):
  373. pass
  374. ### Test to make Fredrik happy...
  375. if __name__ == '__main__':
  376. import timeit
  377. if 0:
  378. timeit.TestClass = PythonFunctionCalls
  379. timeit.main(['-s', 'test = TestClass(); test.rounds = 1000',
  380. 'test.test()'])
  381. else:
  382. setup = """\
  383. global f,f1,g,h
  384. # define functions
  385. def f():
  386. pass
  387. def f1(x):
  388. pass
  389. def g(a,b,c):
  390. return a,b,c
  391. def h(a,b,c,d=1,e=2,f=3):
  392. return d,e,f
  393. i = 1
  394. """
  395. test = """\
  396. f()
  397. f1(i)
  398. f1(i)
  399. f1(i)
  400. f1(i)
  401. g(i,i,i)
  402. g(i,i,i)
  403. g(i,i,i)
  404. g(i,i,i)
  405. h(i,i,3,i,i)
  406. h(i,i,i,2,i,3)
  407. f()
  408. f1(i)
  409. f1(i)
  410. f1(i)
  411. f1(i)
  412. g(i,i,i)
  413. g(i,i,i)
  414. g(i,i,i)
  415. g(i,i,i)
  416. h(i,i,3,i,i)
  417. h(i,i,i,2,i,3)
  418. f()
  419. f1(i)
  420. f1(i)
  421. f1(i)
  422. f1(i)
  423. g(i,i,i)
  424. g(i,i,i)
  425. g(i,i,i)
  426. g(i,i,i)
  427. h(i,i,3,i,i)
  428. h(i,i,i,2,i,3)
  429. f()
  430. f1(i)
  431. f1(i)
  432. f1(i)
  433. f1(i)
  434. g(i,i,i)
  435. g(i,i,i)
  436. g(i,i,i)
  437. g(i,i,i)
  438. h(i,i,3,i,i)
  439. h(i,i,i,2,i,3)
  440. f()
  441. f1(i)
  442. f1(i)
  443. f1(i)
  444. f1(i)
  445. g(i,i,i)
  446. g(i,i,i)
  447. g(i,i,i)
  448. g(i,i,i)
  449. h(i,i,3,i,i)
  450. h(i,i,i,2,i,3)
  451. """
  452. timeit.main(['-s', setup,
  453. test])