blob: b01843afaa5151457eb5d333fea7e9db7ac58ee5 [file] [log] [blame]
Marc-André Lemburgc311f642006-04-19 15:27:33 +00001from pybench import Test
2from string import join
3
4class ConcatStrings(Test):
5
6 version = 0.1
7 operations = 10 * 5
Steve Holdend05e5462006-05-26 18:26:21 +00008 rounds = 60000
Marc-André Lemburgc311f642006-04-19 15:27:33 +00009
10 def test(self):
11
12 # Make sure the strings are *not* interned
13 s = join(map(str,range(100)))
14 t = join(map(str,range(1,101)))
15
16 for i in xrange(self.rounds):
17 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
79 s = join(map(str,range(100)))
80 t = join(map(str,range(1,101)))
81
82 for i in xrange(self.rounds):
83 pass
Tim Petersf9cc5942006-04-21 16:34:54 +000084
Marc-André Lemburgc311f642006-04-19 15:27:33 +000085
86class CompareStrings(Test):
87
88 version = 0.2
89 operations = 10 * 5
Steve Holdend05e5462006-05-26 18:26:21 +000090 rounds = 200000
Marc-André Lemburgc311f642006-04-19 15:27:33 +000091
92 def test(self):
93
94 # Make sure the strings are *not* interned
95 s = join(map(str,range(10)))
96 t = join(map(str,range(10))) + "abc"
97
98 for i in xrange(self.rounds):
99 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
161 s = join(map(str,range(10)))
162 t = join(map(str,range(10))) + "abc"
163
164 for i in xrange(self.rounds):
165 pass
Tim Petersf9cc5942006-04-21 16:34:54 +0000166
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000167
168class CompareInternedStrings(Test):
169
170 version = 0.1
171 operations = 10 * 5
Steve Holdend05e5462006-05-26 18:26:21 +0000172 rounds = 200000
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000173
174 def test(self):
175
176 # Make sure the strings *are* interned
177 s = intern(join(map(str,range(10))))
178 t = s
179
180 for i in xrange(self.rounds):
181 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
243 s = intern(join(map(str,range(10))))
244 t = s
245
246 for i in xrange(self.rounds):
247 pass
Tim Petersf9cc5942006-04-21 16:34:54 +0000248
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000249
250class CreateStringsWithConcat(Test):
251
252 version = 0.1
253 operations = 10 * 5
Steve Holdend05e5462006-05-26 18:26:21 +0000254 rounds = 80000
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000255
256 def test(self):
257
258 for i in xrange(self.rounds):
259 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
321 for i in xrange(self.rounds):
322 pass
Tim Petersf9cc5942006-04-21 16:34:54 +0000323
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000324
325class StringSlicing(Test):
326
327 version = 0.1
328 operations = 5 * 7
Steve Holdend05e5462006-05-26 18:26:21 +0000329 rounds = 100000
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000330
331 def test(self):
332
333 s = join(map(str,range(100)))
334
335 for i in xrange(self.rounds):
336
Tim Petersf9cc5942006-04-21 16:34:54 +0000337 s[50:]
338 s[:25]
339 s[50:55]
340 s[-1:]
341 s[:1]
342 s[2:]
343 s[11:-11]
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000344
Tim Petersf9cc5942006-04-21 16:34:54 +0000345 s[50:]
346 s[:25]
347 s[50:55]
348 s[-1:]
349 s[:1]
350 s[2:]
351 s[11:-11]
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000352
Tim Petersf9cc5942006-04-21 16:34:54 +0000353 s[50:]
354 s[:25]
355 s[50:55]
356 s[-1:]
357 s[:1]
358 s[2:]
359 s[11:-11]
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000360
Tim Petersf9cc5942006-04-21 16:34:54 +0000361 s[50:]
362 s[:25]
363 s[50:55]
364 s[-1:]
365 s[:1]
366 s[2:]
367 s[11:-11]
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000368
Tim Petersf9cc5942006-04-21 16:34:54 +0000369 s[50:]
370 s[:25]
371 s[50:55]
372 s[-1:]
373 s[:1]
374 s[2:]
375 s[11:-11]
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000376
377 def calibrate(self):
378
379 s = join(map(str,range(100)))
380
381 for i in xrange(self.rounds):
382 pass
383
384### String methods
385
386if hasattr('', 'lower'):
387
388 class StringMappings(Test):
389
390 version = 0.1
391 operations = 3 * (5 + 4 + 2 + 1)
Steve Holdend05e5462006-05-26 18:26:21 +0000392 rounds = 70000
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000393
394 def test(self):
395
396 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)),'')
400
401 for i in xrange(self.rounds):
402
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
453 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)),'')
457
458 for i in xrange(self.rounds):
459 pass
460
461 class StringPredicates(Test):
462
463 version = 0.1
464 operations = 10 * 7
Steve Holdend05e5462006-05-26 18:26:21 +0000465 rounds = 80000
Marc-André Lemburgc311f642006-04-19 15:27:33 +0000466
467 def test(self):
468
469 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
470 len_data = len(data)
471
472 for i in xrange(self.rounds):
473 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
561 for i in xrange(self.rounds):
562 s = data[i % len_data]