from pybench import Test import sys try: intern except NameError: intern = sys.intern class ConcatStrings(Test): version = 2.0 operations = 10 * 5 rounds = 100000 def test(self): # Make sure the strings are *not* interned s = ''.join(map(str,range(100))) t = ''.join(map(str,range(1,101))) for i in range(self.rounds): t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s t + s def calibrate(self): s = ''.join(map(str,range(100))) t = ''.join(map(str,range(1,101))) for i in range(self.rounds): pass class CompareStrings(Test): version = 2.0 operations = 10 * 5 rounds = 200000 def test(self): # Make sure the strings are *not* interned s = ''.join(map(str,range(10))) t = ''.join(map(str,range(10))) + "abc" for i in range(self.rounds): t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s t < s t > s t == s t > s t < s def calibrate(self): s = ''.join(map(str,range(10))) t = ''.join(map(str,range(10))) + "abc" for i in range(self.rounds): pass class CompareInternedStrings(Test): version = 2.0 operations = 10 * 5 rounds = 300000 def test(self): # Make sure the strings *are* interned s = intern(''.join(map(str,range(10)))) t = s for i in range(self.rounds): t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s t == s t == s t >= s t > s t < s def calibrate(self): s = intern(''.join(map(str,range(10)))) t = s for i in range(self.rounds): pass class CreateStringsWithConcat(Test): version = 2.0 operations = 10 * 5 rounds = 200000 def test(self): for i in range(self.rounds): s = 'om' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' s = s + 'xax' s = s + 'xbx' s = s + 'xcx' s = s + 'xdx' s = s + 'xex' def calibrate(self): for i in range(self.rounds): pass class StringSlicing(Test): version = 2.0 operations = 5 * 7 rounds = 160000 def test(self): s = ''.join(map(str,range(100))) for i in range(self.rounds): s[50:] s[:25] s[50:55] s[-1:] s[:1] s[2:] s[11:-11] s[50:] s[:25] s[50:55] s[-1:] s[:1] s[2:] s[11:-11] s[50:] s[:25] s[50:55] s[-1:] s[:1] s[2:] s[11:-11] s[50:] s[:25] s[50:55] s[-1:] s[:1] s[2:] s[11:-11] s[50:] s[:25] s[50:55] s[-1:] s[:1] s[2:] s[11:-11] def calibrate(self): s = ''.join(map(str,range(100))) for i in range(self.rounds): pass ### String methods if hasattr('', 'lower'): class StringMappings(Test): version = 2.0 operations = 3 * (5 + 4 + 2 + 1) rounds = 70000 def test(self): s = ''.join(map(chr,range(20))) t = ''.join(map(chr,range(50))) u = ''.join(map(chr,range(100))) v = ''.join(map(chr,range(256))) for i in range(self.rounds): s.lower() s.lower() s.lower() s.lower() s.lower() s.upper() s.upper() s.upper() s.upper() s.upper() s.title() s.title() s.title() s.title() s.title() t.lower() t.lower() t.lower() t.lower() t.upper() t.upper() t.upper() t.upper() t.title() t.title() t.title() t.title() u.lower() u.lower() u.upper() u.upper() u.title() u.title() v.lower() v.upper() v.title() def calibrate(self): s = ''.join(map(chr,range(20))) t = ''.join(map(chr,range(50))) u = ''.join(map(chr,range(100))) v = ''.join(map(chr,range(256))) for i in range(self.rounds): pass class StringPredicates(Test): version = 2.0 operations = 10 * 7 rounds = 100000 def test(self): data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) len_data = len(data) for i in range(self.rounds): s = data[i % len_data] s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() s.isalnum() s.isalpha() s.isdigit() s.islower() s.isspace() s.istitle() s.isupper() def calibrate(self): data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10) data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) len_data = len(data) for i in range(self.rounds): s = data[i % len_data]