text: 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]
  