• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from pybench import Test
2import sys
3
4try:
5    intern
6except NameError:
7    intern = sys.intern
8
9
10class ConcatStrings(Test):
11
12    version = 2.0
13    operations = 10 * 5
14    rounds = 100000
15
16    def test(self):
17
18        # Make sure the strings are *not* interned
19        s = ''.join(map(str,range(100)))
20        t = ''.join(map(str,range(1,101)))
21
22        for i in range(self.rounds):
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            t + s
78            t + s
79            t + s
80            t + s
81            t + s
82
83    def calibrate(self):
84
85        s = ''.join(map(str,range(100)))
86        t = ''.join(map(str,range(1,101)))
87
88        for i in range(self.rounds):
89            pass
90
91
92class CompareStrings(Test):
93
94    version = 2.0
95    operations = 10 * 5
96    rounds = 200000
97
98    def test(self):
99
100        # Make sure the strings are *not* interned
101        s = ''.join(map(str,range(10)))
102        t = ''.join(map(str,range(10))) + "abc"
103
104        for i in range(self.rounds):
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            t < s
160            t > s
161            t == s
162            t > s
163            t < s
164
165    def calibrate(self):
166
167        s = ''.join(map(str,range(10)))
168        t = ''.join(map(str,range(10))) + "abc"
169
170        for i in range(self.rounds):
171            pass
172
173
174class CompareInternedStrings(Test):
175
176    version = 2.0
177    operations = 10 * 5
178    rounds = 300000
179
180    def test(self):
181
182        # Make sure the strings *are* interned
183        s = intern(''.join(map(str,range(10))))
184        t = s
185
186        for i in range(self.rounds):
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            t == s
242            t == s
243            t >= s
244            t > s
245            t < s
246
247    def calibrate(self):
248
249        s = intern(''.join(map(str,range(10))))
250        t = s
251
252        for i in range(self.rounds):
253            pass
254
255
256class CreateStringsWithConcat(Test):
257
258    version = 2.0
259    operations = 10 * 5
260    rounds = 200000
261
262    def test(self):
263
264        for i in range(self.rounds):
265            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
327        for i in range(self.rounds):
328            pass
329
330
331class StringSlicing(Test):
332
333    version = 2.0
334    operations = 5 * 7
335    rounds = 160000
336
337    def test(self):
338
339        s = ''.join(map(str,range(100)))
340
341        for i in range(self.rounds):
342
343            s[50:]
344            s[:25]
345            s[50:55]
346            s[-1:]
347            s[:1]
348            s[2:]
349            s[11:-11]
350
351            s[50:]
352            s[:25]
353            s[50:55]
354            s[-1:]
355            s[:1]
356            s[2:]
357            s[11:-11]
358
359            s[50:]
360            s[:25]
361            s[50:55]
362            s[-1:]
363            s[:1]
364            s[2:]
365            s[11:-11]
366
367            s[50:]
368            s[:25]
369            s[50:55]
370            s[-1:]
371            s[:1]
372            s[2:]
373            s[11:-11]
374
375            s[50:]
376            s[:25]
377            s[50:55]
378            s[-1:]
379            s[:1]
380            s[2:]
381            s[11:-11]
382
383    def calibrate(self):
384
385        s = ''.join(map(str,range(100)))
386
387        for i in range(self.rounds):
388            pass
389
390### String methods
391
392if hasattr('', 'lower'):
393
394    class StringMappings(Test):
395
396        version = 2.0
397        operations = 3 * (5 + 4 + 2 + 1)
398        rounds = 70000
399
400        def test(self):
401
402            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)))
406
407            for i in range(self.rounds):
408
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
459            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)))
463
464            for i in range(self.rounds):
465                pass
466
467    class StringPredicates(Test):
468
469        version = 2.0
470        operations = 10 * 7
471        rounds = 100000
472
473        def test(self):
474
475            data = ('abc', '123', '   ', '\xe4\xf6\xfc', '\xdf'*10)
476            len_data = len(data)
477
478            for i in range(self.rounds):
479                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
567            for i in range(self.rounds):
568                s = data[i % len_data]
569