blob: 8e3d702a917935b88be067b2995378fe2305b95e [file] [log] [blame]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001from pybench import Test
Georg Brandl66a796e2006-12-19 20:50:34 +00002import sys
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003
Antoine Pitrou8a681222009-02-07 17:13:31 +00004try:
5 intern
6except NameError:
7 intern = sys.intern
8
9
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000010class ConcatStrings(Test):
11
Thomas Wouters0e3f5912006-08-11 14:57:12 +000012 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000013 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +000014 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000015
16 def test(self):
17
18 # Make sure the strings are *not* interned
Guido van Rossum486364b2007-06-30 05:01:58 +000019 s = ''.join(map(str,range(100)))
20 t = ''.join(map(str,range(1,101)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000021
Guido van Rossum805365e2007-05-07 22:24:25 +000022 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000023 t + s
24 t + s
25 t + s
26 t + s
27 t + s
28
29 t + s
30 t + s
31 t + s
32 t + s
33 t + s
34
35 t + s
36 t + s
37 t + s
38 t + s
39 t + s
40
41 t + s
42 t + s
43 t + s
44 t + s
45 t + s
46
47 t + s
48 t + s
49 t + s
50 t + s
51 t + s
52
53 t + s
54 t + s
55 t + s
56 t + s
57 t + s
58
59 t + s
60 t + s
61 t + s
62 t + s
63 t + s
64
65 t + s
66 t + s
67 t + s
68 t + s
69 t + s
70
71 t + s
72 t + s
73 t + s
74 t + s
75 t + s
76
77 t + s
78 t + s
79 t + s
80 t + s
81 t + s
82
83 def calibrate(self):
84
Guido van Rossum486364b2007-06-30 05:01:58 +000085 s = ''.join(map(str,range(100)))
86 t = ''.join(map(str,range(1,101)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000087
Guido van Rossum805365e2007-05-07 22:24:25 +000088 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000089 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +000090
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000091
92class CompareStrings(Test):
93
Thomas Wouters0e3f5912006-08-11 14:57:12 +000094 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000095 operations = 10 * 5
96 rounds = 200000
97
98 def test(self):
99
100 # Make sure the strings are *not* interned
Guido van Rossum486364b2007-06-30 05:01:58 +0000101 s = ''.join(map(str,range(10)))
102 t = ''.join(map(str,range(10))) + "abc"
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000103
Guido van Rossum805365e2007-05-07 22:24:25 +0000104 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000105 t < s
106 t > s
107 t == s
108 t > s
109 t < s
110
111 t < s
112 t > s
113 t == s
114 t > s
115 t < s
116
117 t < s
118 t > s
119 t == s
120 t > s
121 t < s
122
123 t < s
124 t > s
125 t == s
126 t > s
127 t < s
128
129 t < s
130 t > s
131 t == s
132 t > s
133 t < s
134
135 t < s
136 t > s
137 t == s
138 t > s
139 t < s
140
141 t < s
142 t > s
143 t == s
144 t > s
145 t < s
146
147 t < s
148 t > s
149 t == s
150 t > s
151 t < s
152
153 t < s
154 t > s
155 t == s
156 t > s
157 t < s
158
159 t < s
160 t > s
161 t == s
162 t > s
163 t < s
164
165 def calibrate(self):
166
Guido van Rossum486364b2007-06-30 05:01:58 +0000167 s = ''.join(map(str,range(10)))
168 t = ''.join(map(str,range(10))) + "abc"
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000169
Guido van Rossum805365e2007-05-07 22:24:25 +0000170 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000171 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000172
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000173
174class CompareInternedStrings(Test):
175
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000176 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000177 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000178 rounds = 300000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000179
180 def test(self):
181
182 # Make sure the strings *are* interned
Antoine Pitrou8a681222009-02-07 17:13:31 +0000183 s = intern(''.join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000184 t = s
185
Guido van Rossum805365e2007-05-07 22:24:25 +0000186 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000187 t == s
188 t == s
189 t >= s
190 t > s
191 t < s
192
193 t == s
194 t == s
195 t >= s
196 t > s
197 t < s
198
199 t == s
200 t == s
201 t >= s
202 t > s
203 t < s
204
205 t == s
206 t == s
207 t >= s
208 t > s
209 t < s
210
211 t == s
212 t == s
213 t >= s
214 t > s
215 t < s
216
217 t == s
218 t == s
219 t >= s
220 t > s
221 t < s
222
223 t == s
224 t == s
225 t >= s
226 t > s
227 t < s
228
229 t == s
230 t == s
231 t >= s
232 t > s
233 t < s
234
235 t == s
236 t == s
237 t >= s
238 t > s
239 t < s
240
241 t == s
242 t == s
243 t >= s
244 t > s
245 t < s
246
247 def calibrate(self):
248
Antoine Pitrou8a681222009-02-07 17:13:31 +0000249 s = intern(''.join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000250 t = s
251
Guido van Rossum805365e2007-05-07 22:24:25 +0000252 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000253 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000254
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000255
256class CreateStringsWithConcat(Test):
257
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000258 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000259 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000260 rounds = 200000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000261
262 def test(self):
263
Guido van Rossum805365e2007-05-07 22:24:25 +0000264 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000265 s = 'om'
266 s = s + 'xbx'
267 s = s + 'xcx'
268 s = s + 'xdx'
269 s = s + 'xex'
270
271 s = s + 'xax'
272 s = s + 'xbx'
273 s = s + 'xcx'
274 s = s + 'xdx'
275 s = s + 'xex'
276
277 s = s + 'xax'
278 s = s + 'xbx'
279 s = s + 'xcx'
280 s = s + 'xdx'
281 s = s + 'xex'
282
283 s = s + 'xax'
284 s = s + 'xbx'
285 s = s + 'xcx'
286 s = s + 'xdx'
287 s = s + 'xex'
288
289 s = s + 'xax'
290 s = s + 'xbx'
291 s = s + 'xcx'
292 s = s + 'xdx'
293 s = s + 'xex'
294
295 s = s + 'xax'
296 s = s + 'xbx'
297 s = s + 'xcx'
298 s = s + 'xdx'
299 s = s + 'xex'
300
301 s = s + 'xax'
302 s = s + 'xbx'
303 s = s + 'xcx'
304 s = s + 'xdx'
305 s = s + 'xex'
306
307 s = s + 'xax'
308 s = s + 'xbx'
309 s = s + 'xcx'
310 s = s + 'xdx'
311 s = s + 'xex'
312
313 s = s + 'xax'
314 s = s + 'xbx'
315 s = s + 'xcx'
316 s = s + 'xdx'
317 s = s + 'xex'
318
319 s = s + 'xax'
320 s = s + 'xbx'
321 s = s + 'xcx'
322 s = s + 'xdx'
323 s = s + 'xex'
324
325 def calibrate(self):
326
Guido van Rossum805365e2007-05-07 22:24:25 +0000327 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000328 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000329
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000330
331class StringSlicing(Test):
332
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000333 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000334 operations = 5 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000335 rounds = 160000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000336
337 def test(self):
338
Guido van Rossum486364b2007-06-30 05:01:58 +0000339 s = ''.join(map(str,range(100)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000340
Guido van Rossum805365e2007-05-07 22:24:25 +0000341 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000342
Thomas Wouters477c8d52006-05-27 19:21:47 +0000343 s[50:]
344 s[:25]
345 s[50:55]
346 s[-1:]
347 s[:1]
348 s[2:]
349 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000350
Thomas Wouters477c8d52006-05-27 19:21:47 +0000351 s[50:]
352 s[:25]
353 s[50:55]
354 s[-1:]
355 s[:1]
356 s[2:]
357 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000358
Thomas Wouters477c8d52006-05-27 19:21:47 +0000359 s[50:]
360 s[:25]
361 s[50:55]
362 s[-1:]
363 s[:1]
364 s[2:]
365 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000366
Thomas Wouters477c8d52006-05-27 19:21:47 +0000367 s[50:]
368 s[:25]
369 s[50:55]
370 s[-1:]
371 s[:1]
372 s[2:]
373 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000374
Thomas Wouters477c8d52006-05-27 19:21:47 +0000375 s[50:]
376 s[:25]
377 s[50:55]
378 s[-1:]
379 s[:1]
380 s[2:]
381 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000382
383 def calibrate(self):
384
Guido van Rossum486364b2007-06-30 05:01:58 +0000385 s = ''.join(map(str,range(100)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000386
Guido van Rossum805365e2007-05-07 22:24:25 +0000387 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000388 pass
389
390### String methods
391
392if hasattr('', 'lower'):
393
394 class StringMappings(Test):
395
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000396 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000397 operations = 3 * (5 + 4 + 2 + 1)
398 rounds = 70000
399
400 def test(self):
401
Guido van Rossum486364b2007-06-30 05:01:58 +0000402 s = ''.join(map(chr,range(20)))
403 t = ''.join(map(chr,range(50)))
404 u = ''.join(map(chr,range(100)))
405 v = ''.join(map(chr,range(256)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000406
Guido van Rossum805365e2007-05-07 22:24:25 +0000407 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000408
409 s.lower()
410 s.lower()
411 s.lower()
412 s.lower()
413 s.lower()
414
415 s.upper()
416 s.upper()
417 s.upper()
418 s.upper()
419 s.upper()
420
421 s.title()
422 s.title()
423 s.title()
424 s.title()
425 s.title()
426
427 t.lower()
428 t.lower()
429 t.lower()
430 t.lower()
431
432 t.upper()
433 t.upper()
434 t.upper()
435 t.upper()
436
437 t.title()
438 t.title()
439 t.title()
440 t.title()
441
442 u.lower()
443 u.lower()
444
445 u.upper()
446 u.upper()
447
448 u.title()
449 u.title()
450
451 v.lower()
452
453 v.upper()
454
455 v.title()
456
457 def calibrate(self):
458
Guido van Rossum486364b2007-06-30 05:01:58 +0000459 s = ''.join(map(chr,range(20)))
460 t = ''.join(map(chr,range(50)))
461 u = ''.join(map(chr,range(100)))
462 v = ''.join(map(chr,range(256)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000463
Guido van Rossum805365e2007-05-07 22:24:25 +0000464 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000465 pass
466
467 class StringPredicates(Test):
468
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000469 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000470 operations = 10 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000471 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000472
473 def test(self):
474
475 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
476 len_data = len(data)
477
Guido van Rossum805365e2007-05-07 22:24:25 +0000478 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000479 s = data[i % len_data]
480
481 s.isalnum()
482 s.isalpha()
483 s.isdigit()
484 s.islower()
485 s.isspace()
486 s.istitle()
487 s.isupper()
488
489 s.isalnum()
490 s.isalpha()
491 s.isdigit()
492 s.islower()
493 s.isspace()
494 s.istitle()
495 s.isupper()
496
497 s.isalnum()
498 s.isalpha()
499 s.isdigit()
500 s.islower()
501 s.isspace()
502 s.istitle()
503 s.isupper()
504
505 s.isalnum()
506 s.isalpha()
507 s.isdigit()
508 s.islower()
509 s.isspace()
510 s.istitle()
511 s.isupper()
512
513 s.isalnum()
514 s.isalpha()
515 s.isdigit()
516 s.islower()
517 s.isspace()
518 s.istitle()
519 s.isupper()
520
521 s.isalnum()
522 s.isalpha()
523 s.isdigit()
524 s.islower()
525 s.isspace()
526 s.istitle()
527 s.isupper()
528
529 s.isalnum()
530 s.isalpha()
531 s.isdigit()
532 s.islower()
533 s.isspace()
534 s.istitle()
535 s.isupper()
536
537 s.isalnum()
538 s.isalpha()
539 s.isdigit()
540 s.islower()
541 s.isspace()
542 s.istitle()
543 s.isupper()
544
545 s.isalnum()
546 s.isalpha()
547 s.isdigit()
548 s.islower()
549 s.isspace()
550 s.istitle()
551 s.isupper()
552
553 s.isalnum()
554 s.isalpha()
555 s.isdigit()
556 s.islower()
557 s.isspace()
558 s.istitle()
559 s.isupper()
560
561 def calibrate(self):
562
563 data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10)
564 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
565 len_data = len(data)
566
Guido van Rossum805365e2007-05-07 22:24:25 +0000567 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000568 s = data[i % len_data]