1from pybench import Test 2import sys 3 4try: 5 intern 6except NameError: 7 intern = sys.intern 8 9 10class ConcatStrings(Test): 11 12 version = 2.0 13 operations = 10 * 5 14 rounds = 100000 15 16 def test(self): 17 18 # Make sure the strings are *not* interned 19 s = ''.join(map(str,range(100))) 20 t = ''.join(map(str,range(1,101))) 21 22 for i in range(self.rounds): 23 t + s 24 t + s 25 t + s 26 t + s 27 t + s 28 29 t + s 30 t + s 31 t + s 32 t + s 33 t + s 34 35 t + s 36 t + s 37 t + s 38 t + s 39 t + s 40 41 t + s 42 t + s 43 t + s 44 t + s 45 t + s 46 47 t + s 48 t + s 49 t + s 50 t + s 51 t + s 52 53 t + s 54 t + s 55 t + s 56 t + s 57 t + s 58 59 t + s 60 t + s 61 t + s 62 t + s 63 t + s 64 65 t + s 66 t + s 67 t + s 68 t + s 69 t + s 70 71 t + s 72 t + s 73 t + s 74 t + s 75 t + s 76 77 t + s 78 t + s 79 t + s 80 t + s 81 t + s 82 83 def calibrate(self): 84 85 s = ''.join(map(str,range(100))) 86 t = ''.join(map(str,range(1,101))) 87 88 for i in range(self.rounds): 89 pass 90 91 92class CompareStrings(Test): 93 94 version = 2.0 95 operations = 10 * 5 96 rounds = 200000 97 98 def test(self): 99 100 # Make sure the strings are *not* interned 101 s = ''.join(map(str,range(10))) 102 t = ''.join(map(str,range(10))) + "abc" 103 104 for i in range(self.rounds): 105 t < s 106 t > s 107 t == s 108 t > s 109 t < s 110 111 t < s 112 t > s 113 t == s 114 t > s 115 t < s 116 117 t < s 118 t > s 119 t == s 120 t > s 121 t < s 122 123 t < s 124 t > s 125 t == s 126 t > s 127 t < s 128 129 t < s 130 t > s 131 t == s 132 t > s 133 t < s 134 135 t < s 136 t > s 137 t == s 138 t > s 139 t < s 140 141 t < s 142 t > s 143 t == s 144 t > s 145 t < s 146 147 t < s 148 t > s 149 t == s 150 t > s 151 t < s 152 153 t < s 154 t > s 155 t == s 156 t > s 157 t < s 158 159 t < s 160 t > s 161 t == s 162 t > s 163 t < s 164 165 def calibrate(self): 166 167 s = ''.join(map(str,range(10))) 168 t = ''.join(map(str,range(10))) + "abc" 169 170 for i in range(self.rounds): 171 pass 172 173 174class CompareInternedStrings(Test): 175 176 version = 2.0 177 operations = 10 * 5 178 rounds = 300000 179 180 def test(self): 181 182 # Make sure the strings *are* interned 183 s = intern(''.join(map(str,range(10)))) 184 t = s 185 186 for i in range(self.rounds): 187 t == s 188 t == s 189 t >= s 190 t > s 191 t < s 192 193 t == s 194 t == s 195 t >= s 196 t > s 197 t < s 198 199 t == s 200 t == s 201 t >= s 202 t > s 203 t < s 204 205 t == s 206 t == s 207 t >= s 208 t > s 209 t < s 210 211 t == s 212 t == s 213 t >= s 214 t > s 215 t < s 216 217 t == s 218 t == s 219 t >= s 220 t > s 221 t < s 222 223 t == s 224 t == s 225 t >= s 226 t > s 227 t < s 228 229 t == s 230 t == s 231 t >= s 232 t > s 233 t < s 234 235 t == s 236 t == s 237 t >= s 238 t > s 239 t < s 240 241 t == s 242 t == s 243 t >= s 244 t > s 245 t < s 246 247 def calibrate(self): 248 249 s = intern(''.join(map(str,range(10)))) 250 t = s 251 252 for i in range(self.rounds): 253 pass 254 255 256class CreateStringsWithConcat(Test): 257 258 version = 2.0 259 operations = 10 * 5 260 rounds = 200000 261 262 def test(self): 263 264 for i in range(self.rounds): 265 s = 'om' 266 s = s + 'xbx' 267 s = s + 'xcx' 268 s = s + 'xdx' 269 s = s + 'xex' 270 271 s = s + 'xax' 272 s = s + 'xbx' 273 s = s + 'xcx' 274 s = s + 'xdx' 275 s = s + 'xex' 276 277 s = s + 'xax' 278 s = s + 'xbx' 279 s = s + 'xcx' 280 s = s + 'xdx' 281 s = s + 'xex' 282 283 s = s + 'xax' 284 s = s + 'xbx' 285 s = s + 'xcx' 286 s = s + 'xdx' 287 s = s + 'xex' 288 289 s = s + 'xax' 290 s = s + 'xbx' 291 s = s + 'xcx' 292 s = s + 'xdx' 293 s = s + 'xex' 294 295 s = s + 'xax' 296 s = s + 'xbx' 297 s = s + 'xcx' 298 s = s + 'xdx' 299 s = s + 'xex' 300 301 s = s + 'xax' 302 s = s + 'xbx' 303 s = s + 'xcx' 304 s = s + 'xdx' 305 s = s + 'xex' 306 307 s = s + 'xax' 308 s = s + 'xbx' 309 s = s + 'xcx' 310 s = s + 'xdx' 311 s = s + 'xex' 312 313 s = s + 'xax' 314 s = s + 'xbx' 315 s = s + 'xcx' 316 s = s + 'xdx' 317 s = s + 'xex' 318 319 s = s + 'xax' 320 s = s + 'xbx' 321 s = s + 'xcx' 322 s = s + 'xdx' 323 s = s + 'xex' 324 325 def calibrate(self): 326 327 for i in range(self.rounds): 328 pass 329 330 331class StringSlicing(Test): 332 333 version = 2.0 334 operations = 5 * 7 335 rounds = 160000 336 337 def test(self): 338 339 s = ''.join(map(str,range(100))) 340 341 for i in range(self.rounds): 342 343 s[50:] 344 s[:25] 345 s[50:55] 346 s[-1:] 347 s[:1] 348 s[2:] 349 s[11:-11] 350 351 s[50:] 352 s[:25] 353 s[50:55] 354 s[-1:] 355 s[:1] 356 s[2:] 357 s[11:-11] 358 359 s[50:] 360 s[:25] 361 s[50:55] 362 s[-1:] 363 s[:1] 364 s[2:] 365 s[11:-11] 366 367 s[50:] 368 s[:25] 369 s[50:55] 370 s[-1:] 371 s[:1] 372 s[2:] 373 s[11:-11] 374 375 s[50:] 376 s[:25] 377 s[50:55] 378 s[-1:] 379 s[:1] 380 s[2:] 381 s[11:-11] 382 383 def calibrate(self): 384 385 s = ''.join(map(str,range(100))) 386 387 for i in range(self.rounds): 388 pass 389 390### String methods 391 392if hasattr('', 'lower'): 393 394 class StringMappings(Test): 395 396 version = 2.0 397 operations = 3 * (5 + 4 + 2 + 1) 398 rounds = 70000 399 400 def test(self): 401 402 s = ''.join(map(chr,range(20))) 403 t = ''.join(map(chr,range(50))) 404 u = ''.join(map(chr,range(100))) 405 v = ''.join(map(chr,range(256))) 406 407 for i in range(self.rounds): 408 409 s.lower() 410 s.lower() 411 s.lower() 412 s.lower() 413 s.lower() 414 415 s.upper() 416 s.upper() 417 s.upper() 418 s.upper() 419 s.upper() 420 421 s.title() 422 s.title() 423 s.title() 424 s.title() 425 s.title() 426 427 t.lower() 428 t.lower() 429 t.lower() 430 t.lower() 431 432 t.upper() 433 t.upper() 434 t.upper() 435 t.upper() 436 437 t.title() 438 t.title() 439 t.title() 440 t.title() 441 442 u.lower() 443 u.lower() 444 445 u.upper() 446 u.upper() 447 448 u.title() 449 u.title() 450 451 v.lower() 452 453 v.upper() 454 455 v.title() 456 457 def calibrate(self): 458 459 s = ''.join(map(chr,range(20))) 460 t = ''.join(map(chr,range(50))) 461 u = ''.join(map(chr,range(100))) 462 v = ''.join(map(chr,range(256))) 463 464 for i in range(self.rounds): 465 pass 466 467 class StringPredicates(Test): 468 469 version = 2.0 470 operations = 10 * 7 471 rounds = 100000 472 473 def test(self): 474 475 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) 476 len_data = len(data) 477 478 for i in range(self.rounds): 479 s = data[i % len_data] 480 481 s.isalnum() 482 s.isalpha() 483 s.isdigit() 484 s.islower() 485 s.isspace() 486 s.istitle() 487 s.isupper() 488 489 s.isalnum() 490 s.isalpha() 491 s.isdigit() 492 s.islower() 493 s.isspace() 494 s.istitle() 495 s.isupper() 496 497 s.isalnum() 498 s.isalpha() 499 s.isdigit() 500 s.islower() 501 s.isspace() 502 s.istitle() 503 s.isupper() 504 505 s.isalnum() 506 s.isalpha() 507 s.isdigit() 508 s.islower() 509 s.isspace() 510 s.istitle() 511 s.isupper() 512 513 s.isalnum() 514 s.isalpha() 515 s.isdigit() 516 s.islower() 517 s.isspace() 518 s.istitle() 519 s.isupper() 520 521 s.isalnum() 522 s.isalpha() 523 s.isdigit() 524 s.islower() 525 s.isspace() 526 s.istitle() 527 s.isupper() 528 529 s.isalnum() 530 s.isalpha() 531 s.isdigit() 532 s.islower() 533 s.isspace() 534 s.istitle() 535 s.isupper() 536 537 s.isalnum() 538 s.isalpha() 539 s.isdigit() 540 s.islower() 541 s.isspace() 542 s.istitle() 543 s.isupper() 544 545 s.isalnum() 546 s.isalpha() 547 s.isdigit() 548 s.islower() 549 s.isspace() 550 s.istitle() 551 s.isupper() 552 553 s.isalnum() 554 s.isalpha() 555 s.isdigit() 556 s.islower() 557 s.isspace() 558 s.istitle() 559 s.isupper() 560 561 def calibrate(self): 562 563 data = ('abc', '123', ' ', '\u1234\u2345\u3456', '\uFFFF'*10) 564 data = ('abc', '123', ' ', '\xe4\xf6\xfc', '\xdf'*10) 565 len_data = len(data) 566 567 for i in range(self.rounds): 568 s = data[i % len_data] 569