Add better error reporting for MemoryErrors caused by str->float conversions.
[python.git] / Tools / pybench / Strings.py
blob3be8b35e9e37d3a6071bc0196ca523dce361850b
1 from pybench import Test
2 from string import join
4 class ConcatStrings(Test):
6 version = 2.0
7 operations = 10 * 5
8 rounds = 100000
10 def test(self):
12 # Make sure the strings are *not* interned
13 s = join(map(str,range(100)))
14 t = join(map(str,range(1,101)))
16 for i in xrange(self.rounds):
17 t + s
18 t + s
19 t + s
20 t + s
21 t + s
23 t + s
24 t + s
25 t + s
26 t + s
27 t + s
29 t + s
30 t + s
31 t + s
32 t + s
33 t + s
35 t + s
36 t + s
37 t + s
38 t + s
39 t + s
41 t + s
42 t + s
43 t + s
44 t + s
45 t + s
47 t + s
48 t + s
49 t + s
50 t + s
51 t + s
53 t + s
54 t + s
55 t + s
56 t + s
57 t + s
59 t + s
60 t + s
61 t + s
62 t + s
63 t + s
65 t + s
66 t + s
67 t + s
68 t + s
69 t + s
71 t + s
72 t + s
73 t + s
74 t + s
75 t + s
77 def calibrate(self):
79 s = join(map(str,range(100)))
80 t = join(map(str,range(1,101)))
82 for i in xrange(self.rounds):
83 pass
86 class CompareStrings(Test):
88 version = 2.0
89 operations = 10 * 5
90 rounds = 200000
92 def test(self):
94 # Make sure the strings are *not* interned
95 s = join(map(str,range(10)))
96 t = join(map(str,range(10))) + "abc"
98 for i in xrange(self.rounds):
99 t < s
100 t > s
101 t == s
102 t > s
103 t < s
105 t < s
106 t > s
107 t == s
108 t > s
109 t < s
111 t < s
112 t > s
113 t == s
114 t > s
115 t < s
117 t < s
118 t > s
119 t == s
120 t > s
121 t < s
123 t < s
124 t > s
125 t == s
126 t > s
127 t < s
129 t < s
130 t > s
131 t == s
132 t > s
133 t < s
135 t < s
136 t > s
137 t == s
138 t > s
139 t < s
141 t < s
142 t > s
143 t == s
144 t > s
145 t < s
147 t < s
148 t > s
149 t == s
150 t > s
151 t < s
153 t < s
154 t > s
155 t == s
156 t > s
157 t < s
159 def calibrate(self):
161 s = join(map(str,range(10)))
162 t = join(map(str,range(10))) + "abc"
164 for i in xrange(self.rounds):
165 pass
168 class CompareInternedStrings(Test):
170 version = 2.0
171 operations = 10 * 5
172 rounds = 300000
174 def test(self):
176 # Make sure the strings *are* interned
177 s = intern(join(map(str,range(10))))
178 t = s
180 for i in xrange(self.rounds):
181 t == s
182 t == s
183 t >= s
184 t > s
185 t < s
187 t == s
188 t == s
189 t >= s
190 t > s
191 t < s
193 t == s
194 t == s
195 t >= s
196 t > s
197 t < s
199 t == s
200 t == s
201 t >= s
202 t > s
203 t < s
205 t == s
206 t == s
207 t >= s
208 t > s
209 t < s
211 t == s
212 t == s
213 t >= s
214 t > s
215 t < s
217 t == s
218 t == s
219 t >= s
220 t > s
221 t < s
223 t == s
224 t == s
225 t >= s
226 t > s
227 t < s
229 t == s
230 t == s
231 t >= s
232 t > s
233 t < s
235 t == s
236 t == s
237 t >= s
238 t > s
239 t < s
241 def calibrate(self):
243 s = intern(join(map(str,range(10))))
244 t = s
246 for i in xrange(self.rounds):
247 pass
250 class CreateStringsWithConcat(Test):
252 version = 2.0
253 operations = 10 * 5
254 rounds = 200000
256 def test(self):
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'
265 s = s + 'xax'
266 s = s + 'xbx'
267 s = s + 'xcx'
268 s = s + 'xdx'
269 s = s + 'xex'
271 s = s + 'xax'
272 s = s + 'xbx'
273 s = s + 'xcx'
274 s = s + 'xdx'
275 s = s + 'xex'
277 s = s + 'xax'
278 s = s + 'xbx'
279 s = s + 'xcx'
280 s = s + 'xdx'
281 s = s + 'xex'
283 s = s + 'xax'
284 s = s + 'xbx'
285 s = s + 'xcx'
286 s = s + 'xdx'
287 s = s + 'xex'
289 s = s + 'xax'
290 s = s + 'xbx'
291 s = s + 'xcx'
292 s = s + 'xdx'
293 s = s + 'xex'
295 s = s + 'xax'
296 s = s + 'xbx'
297 s = s + 'xcx'
298 s = s + 'xdx'
299 s = s + 'xex'
301 s = s + 'xax'
302 s = s + 'xbx'
303 s = s + 'xcx'
304 s = s + 'xdx'
305 s = s + 'xex'
307 s = s + 'xax'
308 s = s + 'xbx'
309 s = s + 'xcx'
310 s = s + 'xdx'
311 s = s + 'xex'
313 s = s + 'xax'
314 s = s + 'xbx'
315 s = s + 'xcx'
316 s = s + 'xdx'
317 s = s + 'xex'
319 def calibrate(self):
321 for i in xrange(self.rounds):
322 pass
325 class StringSlicing(Test):
327 version = 2.0
328 operations = 5 * 7
329 rounds = 160000
331 def test(self):
333 s = join(map(str,range(100)))
335 for i in xrange(self.rounds):
337 s[50:]
338 s[:25]
339 s[50:55]
340 s[-1:]
341 s[:1]
342 s[2:]
343 s[11:-11]
345 s[50:]
346 s[:25]
347 s[50:55]
348 s[-1:]
349 s[:1]
350 s[2:]
351 s[11:-11]
353 s[50:]
354 s[:25]
355 s[50:55]
356 s[-1:]
357 s[:1]
358 s[2:]
359 s[11:-11]
361 s[50:]
362 s[:25]
363 s[50:55]
364 s[-1:]
365 s[:1]
366 s[2:]
367 s[11:-11]
369 s[50:]
370 s[:25]
371 s[50:55]
372 s[-1:]
373 s[:1]
374 s[2:]
375 s[11:-11]
377 def calibrate(self):
379 s = join(map(str,range(100)))
381 for i in xrange(self.rounds):
382 pass
384 ### String methods
386 if hasattr('', 'lower'):
388 class StringMappings(Test):
390 version = 2.0
391 operations = 3 * (5 + 4 + 2 + 1)
392 rounds = 70000
394 def test(self):
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)),'')
401 for i in xrange(self.rounds):
403 s.lower()
404 s.lower()
405 s.lower()
406 s.lower()
407 s.lower()
409 s.upper()
410 s.upper()
411 s.upper()
412 s.upper()
413 s.upper()
415 s.title()
416 s.title()
417 s.title()
418 s.title()
419 s.title()
421 t.lower()
422 t.lower()
423 t.lower()
424 t.lower()
426 t.upper()
427 t.upper()
428 t.upper()
429 t.upper()
431 t.title()
432 t.title()
433 t.title()
434 t.title()
436 u.lower()
437 u.lower()
439 u.upper()
440 u.upper()
442 u.title()
443 u.title()
445 v.lower()
447 v.upper()
449 v.title()
451 def calibrate(self):
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)),'')
458 for i in xrange(self.rounds):
459 pass
461 class StringPredicates(Test):
463 version = 2.0
464 operations = 10 * 7
465 rounds = 100000
467 def test(self):
469 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
470 len_data = len(data)
472 for i in xrange(self.rounds):
473 s = data[i % len_data]
475 s.isalnum()
476 s.isalpha()
477 s.isdigit()
478 s.islower()
479 s.isspace()
480 s.istitle()
481 s.isupper()
483 s.isalnum()
484 s.isalpha()
485 s.isdigit()
486 s.islower()
487 s.isspace()
488 s.istitle()
489 s.isupper()
491 s.isalnum()
492 s.isalpha()
493 s.isdigit()
494 s.islower()
495 s.isspace()
496 s.istitle()
497 s.isupper()
499 s.isalnum()
500 s.isalpha()
501 s.isdigit()
502 s.islower()
503 s.isspace()
504 s.istitle()
505 s.isupper()
507 s.isalnum()
508 s.isalpha()
509 s.isdigit()
510 s.islower()
511 s.isspace()
512 s.istitle()
513 s.isupper()
515 s.isalnum()
516 s.isalpha()
517 s.isdigit()
518 s.islower()
519 s.isspace()
520 s.istitle()
521 s.isupper()
523 s.isalnum()
524 s.isalpha()
525 s.isdigit()
526 s.islower()
527 s.isspace()
528 s.istitle()
529 s.isupper()
531 s.isalnum()
532 s.isalpha()
533 s.isdigit()
534 s.islower()
535 s.isspace()
536 s.istitle()
537 s.isupper()
539 s.isalnum()
540 s.isalpha()
541 s.isdigit()
542 s.islower()
543 s.isspace()
544 s.istitle()
545 s.isupper()
547 s.isalnum()
548 s.isalpha()
549 s.isdigit()
550 s.islower()
551 s.isspace()
552 s.istitle()
553 s.isupper()
555 def calibrate(self):
557 data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10)
558 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10)
559 len_data = len(data)
561 for i in xrange(self.rounds):
562 s = data[i % len_data]