You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
563 lines
11 KiB
563 lines
11 KiB
4 months ago
|
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]
|