try: | |
unicode | |
except NameError: | |
raise ImportError | |
from pybench import Test | |
from string import join | |
class ConcatUnicode(Test): | |
version = 2.0 | |
operations = 10 * 5 | |
rounds = 60000 | |
def test(self): | |
# Make sure the strings are *not* interned | |
s = unicode(join(map(str,range(100)))) | |
t = unicode(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 = unicode(join(map(str,range(100)))) | |
t = unicode(join(map(str,range(1,101)))) | |
for i in xrange(self.rounds): | |
pass | |
class CompareUnicode(Test): | |
version = 2.0 | |
operations = 10 * 5 | |
rounds = 150000 | |
def test(self): | |
# Make sure the strings are *not* interned | |
s = unicode(join(map(str,range(10)))) | |
t = unicode(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 = unicode(join(map(str,range(10)))) | |
t = unicode(join(map(str,range(10))) + "abc") | |
for i in xrange(self.rounds): | |
pass | |
class CreateUnicodeWithConcat(Test): | |
version = 2.0 | |
operations = 10 * 5 | |
rounds = 80000 | |
def test(self): | |
for i in xrange(self.rounds): | |
s = u'om' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
s = s + u'xax' | |
s = s + u'xbx' | |
s = s + u'xcx' | |
s = s + u'xdx' | |
s = s + u'xex' | |
def calibrate(self): | |
for i in xrange(self.rounds): | |
pass | |
class UnicodeSlicing(Test): | |
version = 2.0 | |
operations = 5 * 7 | |
rounds = 140000 | |
def test(self): | |
s = unicode(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 = unicode(join(map(str,range(100)))) | |
for i in xrange(self.rounds): | |
pass | |
### String methods | |
class UnicodeMappings(Test): | |
version = 2.0 | |
operations = 3 * (5 + 4 + 2 + 1) | |
rounds = 10000 | |
def test(self): | |
s = join(map(unichr,range(20)),'') | |
t = join(map(unichr,range(100)),'') | |
u = join(map(unichr,range(500)),'') | |
v = join(map(unichr,range(1000)),'') | |
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(unichr,range(20)),'') | |
t = join(map(unichr,range(100)),'') | |
u = join(map(unichr,range(500)),'') | |
v = join(map(unichr,range(1000)),'') | |
for i in xrange(self.rounds): | |
pass | |
class UnicodePredicates(Test): | |
version = 2.0 | |
operations = 5 * 9 | |
rounds = 120000 | |
def test(self): | |
data = (u'abc', u'123', u' ', u'\u1234\u2345\u3456', u'\uFFFF'*10) | |
len_data = len(data) | |
for i in xrange(self.rounds): | |
s = data[i % len_data] | |
s.isalnum() | |
s.isalpha() | |
s.isdecimal() | |
s.isdigit() | |
s.islower() | |
s.isnumeric() | |
s.isspace() | |
s.istitle() | |
s.isupper() | |
s.isalnum() | |
s.isalpha() | |
s.isdecimal() | |
s.isdigit() | |
s.islower() | |
s.isnumeric() | |
s.isspace() | |
s.istitle() | |
s.isupper() | |
s.isalnum() | |
s.isalpha() | |
s.isdecimal() | |
s.isdigit() | |
s.islower() | |
s.isnumeric() | |
s.isspace() | |
s.istitle() | |
s.isupper() | |
s.isalnum() | |
s.isalpha() | |
s.isdecimal() | |
s.isdigit() | |
s.islower() | |
s.isnumeric() | |
s.isspace() | |
s.istitle() | |
s.isupper() | |
s.isalnum() | |
s.isalpha() | |
s.isdecimal() | |
s.isdigit() | |
s.islower() | |
s.isnumeric() | |
s.isspace() | |
s.istitle() | |
s.isupper() | |
def calibrate(self): | |
data = (u'abc', u'123', u' ', u'\u1234\u2345\u3456', u'\uFFFF'*10) | |
len_data = len(data) | |
for i in xrange(self.rounds): | |
s = data[i % len_data] | |
try: | |
import unicodedata | |
except ImportError: | |
pass | |
else: | |
class UnicodeProperties(Test): | |
version = 2.0 | |
operations = 5 * 8 | |
rounds = 100000 | |
def test(self): | |
data = (u'a', u'1', u' ', u'\u1234', u'\uFFFF') | |
len_data = len(data) | |
digit = unicodedata.digit | |
numeric = unicodedata.numeric | |
decimal = unicodedata.decimal | |
category = unicodedata.category | |
bidirectional = unicodedata.bidirectional | |
decomposition = unicodedata.decomposition | |
mirrored = unicodedata.mirrored | |
combining = unicodedata.combining | |
for i in xrange(self.rounds): | |
c = data[i % len_data] | |
digit(c, None) | |
numeric(c, None) | |
decimal(c, None) | |
category(c) | |
bidirectional(c) | |
decomposition(c) | |
mirrored(c) | |
combining(c) | |
digit(c, None) | |
numeric(c, None) | |
decimal(c, None) | |
category(c) | |
bidirectional(c) | |
decomposition(c) | |
mirrored(c) | |
combining(c) | |
digit(c, None) | |
numeric(c, None) | |
decimal(c, None) | |
category(c) | |
bidirectional(c) | |
decomposition(c) | |
mirrored(c) | |
combining(c) | |
digit(c, None) | |
numeric(c, None) | |
decimal(c, None) | |
category(c) | |
bidirectional(c) | |
decomposition(c) | |
mirrored(c) | |
combining(c) | |
digit(c, None) | |
numeric(c, None) | |
decimal(c, None) | |
category(c) | |
bidirectional(c) | |
decomposition(c) | |
mirrored(c) | |
combining(c) | |
def calibrate(self): | |
data = (u'a', u'1', u' ', u'\u1234', u'\uFFFF') | |
len_data = len(data) | |
digit = unicodedata.digit | |
numeric = unicodedata.numeric | |
decimal = unicodedata.decimal | |
category = unicodedata.category | |
bidirectional = unicodedata.bidirectional | |
decomposition = unicodedata.decomposition | |
mirrored = unicodedata.mirrored | |
combining = unicodedata.combining | |
for i in xrange(self.rounds): | |
c = data[i % len_data] |