blob: 25e2ad5b4655cd1ab4acf206823dacce426536c7 [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
4class ConcatStrings(Test):
5
Thomas Wouters0e3f5912006-08-11 14:57:12 +00006 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00007 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +00008 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00009
10 def test(self):
11
12 # Make sure the strings are *not* interned
Guido van Rossum486364b2007-06-30 05:01:58 +000013 s = ''.join(map(str,range(100)))
14 t = ''.join(map(str,range(1,101)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000015
Guido van Rossum805365e2007-05-07 22:24:25 +000016 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000017 t + s
18 t + s
19 t + s
20 t + s
21 t + s
22
23 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 def calibrate(self):
78
Guido van Rossum486364b2007-06-30 05:01:58 +000079 s = ''.join(map(str,range(100)))
80 t = ''.join(map(str,range(1,101)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000081
Guido van Rossum805365e2007-05-07 22:24:25 +000082 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000083 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +000084
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000085
86class CompareStrings(Test):
87
Thomas Wouters0e3f5912006-08-11 14:57:12 +000088 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000089 operations = 10 * 5
90 rounds = 200000
91
92 def test(self):
93
94 # Make sure the strings are *not* interned
Guido van Rossum486364b2007-06-30 05:01:58 +000095 s = ''.join(map(str,range(10)))
96 t = ''.join(map(str,range(10))) + "abc"
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000097
Guido van Rossum805365e2007-05-07 22:24:25 +000098 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000099 t < s
100 t > s
101 t == s
102 t > s
103 t < s
104
105 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 def calibrate(self):
160
Guido van Rossum486364b2007-06-30 05:01:58 +0000161 s = ''.join(map(str,range(10)))
162 t = ''.join(map(str,range(10))) + "abc"
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000163
Guido van Rossum805365e2007-05-07 22:24:25 +0000164 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000165 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000166
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000167
168class CompareInternedStrings(Test):
169
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000170 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000171 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000172 rounds = 300000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000173
174 def test(self):
175
176 # Make sure the strings *are* interned
Guido van Rossum486364b2007-06-30 05:01:58 +0000177 s = sys.intern(''.join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000178 t = s
179
Guido van Rossum805365e2007-05-07 22:24:25 +0000180 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000181 t == s
182 t == s
183 t >= s
184 t > s
185 t < s
186
187 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 def calibrate(self):
242
Guido van Rossum486364b2007-06-30 05:01:58 +0000243 s = sys.intern(''.join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000244 t = s
245
Guido van Rossum805365e2007-05-07 22:24:25 +0000246 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000247 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000248
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000249
250class CreateStringsWithConcat(Test):
251
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000252 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000253 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000254 rounds = 200000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000255
256 def test(self):
257
Guido van Rossum805365e2007-05-07 22:24:25 +0000258 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000259 s = 'om'
260 s = s + 'xbx'
261 s = s + 'xcx'
262 s = s + 'xdx'
263 s = s + 'xex'
264
265 s = s + 'xax'
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 def calibrate(self):
320
Guido van Rossum805365e2007-05-07 22:24:25 +0000321 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000322 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000323
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000324
325class StringSlicing(Test):
326
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000327 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000328 operations = 5 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000329 rounds = 160000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000330
331 def test(self):
332
Guido van Rossum486364b2007-06-30 05:01:58 +0000333 s = ''.join(map(str,range(100)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000334
Guido van Rossum805365e2007-05-07 22:24:25 +0000335 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000336
Thomas Wouters477c8d52006-05-27 19:21:47 +0000337 s[50:]
338 s[:25]
339 s[50:55]
340 s[-1:]
341 s[:1]
342 s[2:]
343 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000344
Thomas Wouters477c8d52006-05-27 19:21:47 +0000345 s[50:]
346 s[:25]
347 s[50:55]
348 s[-1:]
349 s[:1]
350 s[2:]
351 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000352
Thomas Wouters477c8d52006-05-27 19:21:47 +0000353 s[50:]
354 s[:25]
355 s[50:55]
356 s[-1:]
357 s[:1]
358 s[2:]
359 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000360
Thomas Wouters477c8d52006-05-27 19:21:47 +0000361 s[50:]
362 s[:25]
363 s[50:55]
364 s[-1:]
365 s[:1]
366 s[2:]
367 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000368
Thomas Wouters477c8d52006-05-27 19:21:47 +0000369 s[50:]
370 s[:25]
371 s[50:55]
372 s[-1:]
373 s[:1]
374 s[2:]
375 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000376
377 def calibrate(self):
378
Guido van Rossum486364b2007-06-30 05:01:58 +0000379 s = ''.join(map(str,range(100)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000380
Guido van Rossum805365e2007-05-07 22:24:25 +0000381 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000382 pass
383
384### String methods
385
386if hasattr('', 'lower'):
387
388 class StringMappings(Test):
389
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000390 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000391 operations = 3 * (5 + 4 + 2 + 1)
392 rounds = 70000
393
394 def test(self):
395
Guido van Rossum486364b2007-06-30 05:01:58 +0000396 s = ''.join(map(chr,range(20)))
397 t = ''.join(map(chr,range(50)))
398 u = ''.join(map(chr,range(100)))
399 v = ''.join(map(chr,range(256)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000400
Guido van Rossum805365e2007-05-07 22:24:25 +0000401 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000402
403 s.lower()
404 s.lower()
405 s.lower()
406 s.lower()
407 s.lower()
408
409 s.upper()
410 s.upper()
411 s.upper()
412 s.upper()
413 s.upper()
414
415 s.title()
416 s.title()
417 s.title()
418 s.title()
419 s.title()
420
421 t.lower()
422 t.lower()
423 t.lower()
424 t.lower()
425
426 t.upper()
427 t.upper()
428 t.upper()
429 t.upper()
430
431 t.title()
432 t.title()
433 t.title()
434 t.title()
435
436 u.lower()
437 u.lower()
438
439 u.upper()
440 u.upper()
441
442 u.title()
443 u.title()
444
445 v.lower()
446
447 v.upper()
448
449 v.title()
450
451 def calibrate(self):
452
Guido van Rossum486364b2007-06-30 05:01:58 +0000453 s = ''.join(map(chr,range(20)))
454 t = ''.join(map(chr,range(50)))
455 u = ''.join(map(chr,range(100)))
456 v = ''.join(map(chr,range(256)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000457
Guido van Rossum805365e2007-05-07 22:24:25 +0000458 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000459 pass
460
461 class StringPredicates(Test):
462
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000463 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000464 operations = 10 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000465 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000466
467 def test(self):
468
469 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
470 len_data = len(data)
471
Guido van Rossum805365e2007-05-07 22:24:25 +0000472 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000473 s = data[i % len_data]
474
475 s.isalnum()
476 s.isalpha()
477 s.isdigit()
478 s.islower()
479 s.isspace()
480 s.istitle()
481 s.isupper()
482
483 s.isalnum()
484 s.isalpha()
485 s.isdigit()
486 s.islower()
487 s.isspace()
488 s.istitle()
489 s.isupper()
490
491 s.isalnum()
492 s.isalpha()
493 s.isdigit()
494 s.islower()
495 s.isspace()
496 s.istitle()
497 s.isupper()
498
499 s.isalnum()
500 s.isalpha()
501 s.isdigit()
502 s.islower()
503 s.isspace()
504 s.istitle()
505 s.isupper()
506
507 s.isalnum()
508 s.isalpha()
509 s.isdigit()
510 s.islower()
511 s.isspace()
512 s.istitle()
513 s.isupper()
514
515 s.isalnum()
516 s.isalpha()
517 s.isdigit()
518 s.islower()
519 s.isspace()
520 s.istitle()
521 s.isupper()
522
523 s.isalnum()
524 s.isalpha()
525 s.isdigit()
526 s.islower()
527 s.isspace()
528 s.istitle()
529 s.isupper()
530
531 s.isalnum()
532 s.isalpha()
533 s.isdigit()
534 s.islower()
535 s.isspace()
536 s.istitle()
537 s.isupper()
538
539 s.isalnum()
540 s.isalpha()
541 s.isdigit()
542 s.islower()
543 s.isspace()
544 s.istitle()
545 s.isupper()
546
547 s.isalnum()
548 s.isalpha()
549 s.isdigit()
550 s.islower()
551 s.isspace()
552 s.istitle()
553 s.isupper()
554
555 def calibrate(self):
556
557 data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10)
558 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
559 len_data = len(data)
560
Guido van Rossum805365e2007-05-07 22:24:25 +0000561 for i in range(self.rounds):
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000562 s = data[i % len_data]