from pybench import Test | |
from string import join | |
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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(self.rounds): | |
pass | |
class CreateStringsWithConcat(Test): | |
version = 2.0 | |
operations = 10 * 5 | |
rounds = 200000 | |
def test(self): | |
for i in xrange(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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(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 xrange(self.rounds): | |
s = data[i % len_data] |