blob: dc49df1dae1dd76cc572f5ac3bae089fbb9e3683 [file] [log] [blame]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001from pybench import Test
2from string import join
Georg Brandl66a796e2006-12-19 20:50:34 +00003import sys
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00004
5class ConcatStrings(Test):
6
Thomas Wouters0e3f5912006-08-11 14:57:12 +00007 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00008 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +00009 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000010
11 def test(self):
12
13 # Make sure the strings are *not* interned
14 s = join(map(str,range(100)))
15 t = join(map(str,range(1,101)))
16
17 for i in xrange(self.rounds):
18 t + s
19 t + s
20 t + s
21 t + s
22 t + s
23
24 t + s
25 t + s
26 t + s
27 t + s
28 t + s
29
30 t + s
31 t + s
32 t + s
33 t + s
34 t + s
35
36 t + s
37 t + s
38 t + s
39 t + s
40 t + s
41
42 t + s
43 t + s
44 t + s
45 t + s
46 t + s
47
48 t + s
49 t + s
50 t + s
51 t + s
52 t + s
53
54 t + s
55 t + s
56 t + s
57 t + s
58 t + s
59
60 t + s
61 t + s
62 t + s
63 t + s
64 t + s
65
66 t + s
67 t + s
68 t + s
69 t + s
70 t + s
71
72 t + s
73 t + s
74 t + s
75 t + s
76 t + s
77
78 def calibrate(self):
79
80 s = join(map(str,range(100)))
81 t = join(map(str,range(1,101)))
82
83 for i in xrange(self.rounds):
84 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +000085
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000086
87class CompareStrings(Test):
88
Thomas Wouters0e3f5912006-08-11 14:57:12 +000089 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +000090 operations = 10 * 5
91 rounds = 200000
92
93 def test(self):
94
95 # Make sure the strings are *not* interned
96 s = join(map(str,range(10)))
97 t = join(map(str,range(10))) + "abc"
98
99 for i in xrange(self.rounds):
100 t < s
101 t > s
102 t == s
103 t > s
104 t < s
105
106 t < s
107 t > s
108 t == s
109 t > s
110 t < s
111
112 t < s
113 t > s
114 t == s
115 t > s
116 t < s
117
118 t < s
119 t > s
120 t == s
121 t > s
122 t < s
123
124 t < s
125 t > s
126 t == s
127 t > s
128 t < s
129
130 t < s
131 t > s
132 t == s
133 t > s
134 t < s
135
136 t < s
137 t > s
138 t == s
139 t > s
140 t < s
141
142 t < s
143 t > s
144 t == s
145 t > s
146 t < s
147
148 t < s
149 t > s
150 t == s
151 t > s
152 t < s
153
154 t < s
155 t > s
156 t == s
157 t > s
158 t < s
159
160 def calibrate(self):
161
162 s = join(map(str,range(10)))
163 t = join(map(str,range(10))) + "abc"
164
165 for i in xrange(self.rounds):
166 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000167
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000168
169class CompareInternedStrings(Test):
170
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000171 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000172 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000173 rounds = 300000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000174
175 def test(self):
176
177 # Make sure the strings *are* interned
Georg Brandl66a796e2006-12-19 20:50:34 +0000178 s = sys.intern(join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000179 t = s
180
181 for i in xrange(self.rounds):
182 t == s
183 t == s
184 t >= s
185 t > s
186 t < s
187
188 t == s
189 t == s
190 t >= s
191 t > s
192 t < s
193
194 t == s
195 t == s
196 t >= s
197 t > s
198 t < s
199
200 t == s
201 t == s
202 t >= s
203 t > s
204 t < s
205
206 t == s
207 t == s
208 t >= s
209 t > s
210 t < s
211
212 t == s
213 t == s
214 t >= s
215 t > s
216 t < s
217
218 t == s
219 t == s
220 t >= s
221 t > s
222 t < s
223
224 t == s
225 t == s
226 t >= s
227 t > s
228 t < s
229
230 t == s
231 t == s
232 t >= s
233 t > s
234 t < s
235
236 t == s
237 t == s
238 t >= s
239 t > s
240 t < s
241
242 def calibrate(self):
243
Georg Brandl66a796e2006-12-19 20:50:34 +0000244 s = sys.intern(join(map(str,range(10))))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000245 t = s
246
247 for i in xrange(self.rounds):
248 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000249
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000250
251class CreateStringsWithConcat(Test):
252
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000253 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000254 operations = 10 * 5
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000255 rounds = 200000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000256
257 def test(self):
258
259 for i in xrange(self.rounds):
260 s = 'om'
261 s = s + 'xbx'
262 s = s + 'xcx'
263 s = s + 'xdx'
264 s = s + 'xex'
265
266 s = s + 'xax'
267 s = s + 'xbx'
268 s = s + 'xcx'
269 s = s + 'xdx'
270 s = s + 'xex'
271
272 s = s + 'xax'
273 s = s + 'xbx'
274 s = s + 'xcx'
275 s = s + 'xdx'
276 s = s + 'xex'
277
278 s = s + 'xax'
279 s = s + 'xbx'
280 s = s + 'xcx'
281 s = s + 'xdx'
282 s = s + 'xex'
283
284 s = s + 'xax'
285 s = s + 'xbx'
286 s = s + 'xcx'
287 s = s + 'xdx'
288 s = s + 'xex'
289
290 s = s + 'xax'
291 s = s + 'xbx'
292 s = s + 'xcx'
293 s = s + 'xdx'
294 s = s + 'xex'
295
296 s = s + 'xax'
297 s = s + 'xbx'
298 s = s + 'xcx'
299 s = s + 'xdx'
300 s = s + 'xex'
301
302 s = s + 'xax'
303 s = s + 'xbx'
304 s = s + 'xcx'
305 s = s + 'xdx'
306 s = s + 'xex'
307
308 s = s + 'xax'
309 s = s + 'xbx'
310 s = s + 'xcx'
311 s = s + 'xdx'
312 s = s + 'xex'
313
314 s = s + 'xax'
315 s = s + 'xbx'
316 s = s + 'xcx'
317 s = s + 'xdx'
318 s = s + 'xex'
319
320 def calibrate(self):
321
322 for i in xrange(self.rounds):
323 pass
Thomas Wouters477c8d52006-05-27 19:21:47 +0000324
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000325
326class StringSlicing(Test):
327
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000328 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000329 operations = 5 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000330 rounds = 160000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000331
332 def test(self):
333
334 s = join(map(str,range(100)))
335
336 for i in xrange(self.rounds):
337
Thomas Wouters477c8d52006-05-27 19:21:47 +0000338 s[50:]
339 s[:25]
340 s[50:55]
341 s[-1:]
342 s[:1]
343 s[2:]
344 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000345
Thomas Wouters477c8d52006-05-27 19:21:47 +0000346 s[50:]
347 s[:25]
348 s[50:55]
349 s[-1:]
350 s[:1]
351 s[2:]
352 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000353
Thomas Wouters477c8d52006-05-27 19:21:47 +0000354 s[50:]
355 s[:25]
356 s[50:55]
357 s[-1:]
358 s[:1]
359 s[2:]
360 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000361
Thomas Wouters477c8d52006-05-27 19:21:47 +0000362 s[50:]
363 s[:25]
364 s[50:55]
365 s[-1:]
366 s[:1]
367 s[2:]
368 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000369
Thomas Wouters477c8d52006-05-27 19:21:47 +0000370 s[50:]
371 s[:25]
372 s[50:55]
373 s[-1:]
374 s[:1]
375 s[2:]
376 s[11:-11]
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000377
378 def calibrate(self):
379
380 s = join(map(str,range(100)))
381
382 for i in xrange(self.rounds):
383 pass
384
385### String methods
386
387if hasattr('', 'lower'):
388
389 class StringMappings(Test):
390
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000391 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000392 operations = 3 * (5 + 4 + 2 + 1)
393 rounds = 70000
394
395 def test(self):
396
397 s = join(map(chr,range(20)),'')
398 t = join(map(chr,range(50)),'')
399 u = join(map(chr,range(100)),'')
400 v = join(map(chr,range(256)),'')
401
402 for i in xrange(self.rounds):
403
404 s.lower()
405 s.lower()
406 s.lower()
407 s.lower()
408 s.lower()
409
410 s.upper()
411 s.upper()
412 s.upper()
413 s.upper()
414 s.upper()
415
416 s.title()
417 s.title()
418 s.title()
419 s.title()
420 s.title()
421
422 t.lower()
423 t.lower()
424 t.lower()
425 t.lower()
426
427 t.upper()
428 t.upper()
429 t.upper()
430 t.upper()
431
432 t.title()
433 t.title()
434 t.title()
435 t.title()
436
437 u.lower()
438 u.lower()
439
440 u.upper()
441 u.upper()
442
443 u.title()
444 u.title()
445
446 v.lower()
447
448 v.upper()
449
450 v.title()
451
452 def calibrate(self):
453
454 s = join(map(chr,range(20)),'')
455 t = join(map(chr,range(50)),'')
456 u = join(map(chr,range(100)),'')
457 v = join(map(chr,range(256)),'')
458
459 for i in xrange(self.rounds):
460 pass
461
462 class StringPredicates(Test):
463
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000464 version = 2.0
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000465 operations = 10 * 7
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000466 rounds = 100000
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000467
468 def test(self):
469
470 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
471 len_data = len(data)
472
473 for i in xrange(self.rounds):
474 s = data[i % len_data]
475
476 s.isalnum()
477 s.isalpha()
478 s.isdigit()
479 s.islower()
480 s.isspace()
481 s.istitle()
482 s.isupper()
483
484 s.isalnum()
485 s.isalpha()
486 s.isdigit()
487 s.islower()
488 s.isspace()
489 s.istitle()
490 s.isupper()
491
492 s.isalnum()
493 s.isalpha()
494 s.isdigit()
495 s.islower()
496 s.isspace()
497 s.istitle()
498 s.isupper()
499
500 s.isalnum()
501 s.isalpha()
502 s.isdigit()
503 s.islower()
504 s.isspace()
505 s.istitle()
506 s.isupper()
507
508 s.isalnum()
509 s.isalpha()
510 s.isdigit()
511 s.islower()
512 s.isspace()
513 s.istitle()
514 s.isupper()
515
516 s.isalnum()
517 s.isalpha()
518 s.isdigit()
519 s.islower()
520 s.isspace()
521 s.istitle()
522 s.isupper()
523
524 s.isalnum()
525 s.isalpha()
526 s.isdigit()
527 s.islower()
528 s.isspace()
529 s.istitle()
530 s.isupper()
531
532 s.isalnum()
533 s.isalpha()
534 s.isdigit()
535 s.islower()
536 s.isspace()
537 s.istitle()
538 s.isupper()
539
540 s.isalnum()
541 s.isalpha()
542 s.isdigit()
543 s.islower()
544 s.isspace()
545 s.istitle()
546 s.isupper()
547
548 s.isalnum()
549 s.isalpha()
550 s.isdigit()
551 s.islower()
552 s.isspace()
553 s.istitle()
554 s.isupper()
555
556 def calibrate(self):
557
558 data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10)
559 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
560 len_data = len(data)
561
562 for i in xrange(self.rounds):
563 s = data[i % len_data]