1 2cimport cython 3 4import sys 5IS_PY3 = sys.version_info[0] >= 3 6 7bstring1 = b"abcdefg" 8bstring2 = b"1234567" 9 10string1 = "abcdefg" 11string2 = "1234567" 12 13ustring1 = u"abcdefg" 14ustring2 = u"1234567" 15 16# unicode 17 18@cython.test_assert_path_exists( 19 "//PrimaryCmpNode", 20 "//PrimaryCmpNode[@is_pycmp = False]", 21) 22def unicode_eq(unicode s1, unicode s2): 23 """ 24 >>> unicode_eq(ustring1, ustring1) 25 True 26 >>> unicode_eq(ustring1+ustring2, ustring1+ustring2) 27 True 28 >>> unicode_eq(ustring1, ustring2) 29 False 30 """ 31 return s1 == s2 32 33@cython.test_assert_path_exists( 34 "//PrimaryCmpNode", 35 "//PrimaryCmpNode[@is_pycmp = False]", 36) 37def unicode_neq(unicode s1, unicode s2): 38 """ 39 >>> unicode_neq(ustring1, ustring1) 40 False 41 >>> unicode_neq(ustring1+ustring2, ustring1+ustring2) 42 False 43 >>> unicode_neq(ustring1, ustring2) 44 True 45 """ 46 return s1 != s2 47 48@cython.test_assert_path_exists( 49 "//PrimaryCmpNode", 50 "//PrimaryCmpNode[@is_pycmp = False]", 51) 52def unicode_literal_eq(unicode s): 53 """ 54 >>> unicode_literal_eq(ustring1) 55 True 56 >>> unicode_literal_eq((ustring1+ustring2)[:len(ustring1)]) 57 True 58 >>> unicode_literal_eq(ustring2) 59 False 60 """ 61 return s == u"abcdefg" 62 63@cython.test_assert_path_exists( 64 "//PrimaryCmpNode", 65 "//PrimaryCmpNode[@is_pycmp = False]", 66) 67def unicode_literal_neq(unicode s): 68 """ 69 >>> unicode_literal_neq(ustring1) 70 False 71 >>> unicode_literal_neq((ustring1+ustring2)[:len(ustring1)]) 72 False 73 >>> unicode_literal_neq(ustring2) 74 True 75 """ 76 return s != u"abcdefg" 77 78@cython.test_assert_path_exists( 79 "//PrimaryCmpNode", 80 "//PrimaryCmpNode[@is_pycmp = False]", 81 "//CascadedCmpNode" 82) 83@cython.test_fail_if_path_exists( 84 "//CascadedCmpNode[@is_pycmp = True]", 85 "//PrimaryCmpNode[@is_pycmp = True]", 86) 87def unicode_cascade(unicode s1, unicode s2): 88 """ 89 >>> unicode_cascade(ustring1, ustring1) 90 True 91 >>> unicode_cascade(ustring1, (ustring1+ustring2)[:len(ustring1)]) 92 True 93 >>> unicode_cascade(ustring1, ustring2) 94 False 95 """ 96 return s1 == s2 == u"abcdefg" 97 98@cython.test_assert_path_exists( 99 "//PrimaryCmpNode", 100 "//PrimaryCmpNode[@is_pycmp = False]", 101) 102def unicode_cascade_untyped_end(unicode s1, unicode s2): 103 """ 104 >>> unicode_cascade_untyped_end(ustring1, ustring1) 105 True 106 >>> unicode_cascade_untyped_end(ustring1, (ustring1+ustring2)[:len(ustring1)]) 107 True 108 >>> unicode_cascade_untyped_end(ustring1, ustring2) 109 False 110 """ 111 return s1 == s2 == u"abcdefg" == (<object>ustring1) == ustring1 112 113@cython.test_assert_path_exists( 114 "//PrimaryCmpNode", 115 "//PrimaryCmpNode[@is_pycmp = False]", 116) 117def unicode_cascade_untyped_end_bool(unicode s1, unicode s2): 118 """ 119 >>> unicode_cascade_untyped_end_bool(ustring1, ustring1) 120 True 121 >>> unicode_cascade_untyped_end_bool(ustring1, (ustring1+ustring2)[:len(ustring1)]) 122 True 123 >>> unicode_cascade_untyped_end_bool(ustring1, ustring2) 124 False 125 """ 126 if s1 == s2 == u"abcdefg" == (<object>ustring1) == ustring1: 127 return True 128 else: 129 return False 130 131 132# str 133 134@cython.test_assert_path_exists( 135 "//PrimaryCmpNode", 136 "//PrimaryCmpNode[@is_pycmp = False]", 137) 138def str_eq(str s1, str s2): 139 """ 140 >>> str_eq(string1, string1) 141 True 142 >>> str_eq(string1+string2, string1+string2) 143 True 144 >>> str_eq(string1, string2) 145 False 146 """ 147 return s1 == s2 148 149@cython.test_assert_path_exists( 150 "//PrimaryCmpNode", 151 "//PrimaryCmpNode[@is_pycmp = False]", 152) 153def str_neq(str s1, str s2): 154 """ 155 >>> str_neq(string1, string1) 156 False 157 >>> str_neq(string1+string2, string1+string2) 158 False 159 >>> str_neq(string1, string2) 160 True 161 """ 162 return s1 != s2 163 164@cython.test_assert_path_exists( 165 "//PrimaryCmpNode", 166 "//PrimaryCmpNode[@is_pycmp = False]", 167) 168def str_literal_eq(str s): 169 """ 170 >>> str_literal_eq(string1) 171 True 172 >>> str_literal_eq((string1+string2)[:len(string1)]) 173 True 174 >>> str_literal_eq(string2) 175 False 176 """ 177 return s == "abcdefg" 178 179@cython.test_assert_path_exists( 180 "//PrimaryCmpNode", 181 "//PrimaryCmpNode[@is_pycmp = False]", 182) 183def str_literal_neq(str s): 184 """ 185 >>> str_literal_neq(string1) 186 False 187 >>> str_literal_neq((string1+string2)[:len(string1)]) 188 False 189 >>> str_literal_neq(string2) 190 True 191 """ 192 return s != "abcdefg" 193 194@cython.test_assert_path_exists( 195 "//PrimaryCmpNode", 196 "//PrimaryCmpNode[@is_pycmp = False]", 197) 198@cython.test_fail_if_path_exists( 199 "//CascadedCmpNode[@is_pycmp = True]", 200 "//PrimaryCmpNode[@is_pycmp = True]", 201) 202def str_cascade(str s1, str s2): 203 """ 204 >>> str_cascade(string1, string1) 205 True 206 >>> str_cascade(string1, (string1+string2)[:len(string1)]) 207 True 208 >>> str_cascade(string1, string2) 209 False 210 """ 211 return s1 == s2 == "abcdefg" 212 213@cython.test_assert_path_exists( 214 "//PrimaryCmpNode", 215 "//PrimaryCmpNode[@is_pycmp = False]", 216) 217def str_cascade_untyped_end(str s1, str s2): 218 """ 219 >>> str_cascade_untyped_end(string1, string1) 220 True 221 >>> str_cascade_untyped_end(string1, (string1+string2)[:len(string1)]) 222 True 223 >>> str_cascade_untyped_end(string1, string2) 224 False 225 """ 226 return s1 == s2 == "abcdefg" == (<object>string1) == string1 227 228# bytes 229 230@cython.test_assert_path_exists( 231 "//PrimaryCmpNode", 232 "//PrimaryCmpNode[@is_pycmp = False]", 233) 234def bytes_eq(bytes s1, bytes s2): 235 """ 236 >>> bytes_eq(bstring1, bstring1) 237 True 238 >>> bytes_eq(bstring1+bstring2, bstring1+bstring2) 239 True 240 >>> bytes_eq(bstring1, bstring2) 241 False 242 """ 243 return s1 == s2 244 245@cython.test_assert_path_exists( 246 "//PrimaryCmpNode", 247 "//PrimaryCmpNode[@is_pycmp = False]", 248) 249def bytes_neq(bytes s1, bytes s2): 250 """ 251 >>> bytes_neq(bstring1, bstring1) 252 False 253 >>> bytes_neq(bstring1+bstring2, bstring1+bstring2) 254 False 255 >>> bytes_neq(bstring1, bstring2) 256 True 257 """ 258 return s1 != s2 259 260@cython.test_assert_path_exists( 261 "//PrimaryCmpNode", 262 "//PrimaryCmpNode[@is_pycmp = False]", 263) 264def bytes_literal_eq(bytes s): 265 """ 266 >>> bytes_literal_eq(bstring1) 267 True 268 >>> bytes_literal_eq((bstring1+bstring2)[:len(bstring1)]) 269 True 270 >>> bytes_literal_eq(bstring2) 271 False 272 """ 273 return s == b"abcdefg" 274 275@cython.test_assert_path_exists( 276 "//PrimaryCmpNode", 277 "//PrimaryCmpNode[@is_pycmp = False]", 278) 279def bytes_literal_neq(bytes s): 280 """ 281 >>> bytes_literal_neq(bstring1) 282 False 283 >>> bytes_literal_neq((bstring1+bstring2)[:len(bstring1)]) 284 False 285 >>> bytes_literal_neq(bstring2) 286 True 287 """ 288 return s != b"abcdefg" 289 290@cython.test_assert_path_exists( 291 "//PrimaryCmpNode", 292 "//PrimaryCmpNode[@is_pycmp = False]", 293) 294@cython.test_fail_if_path_exists( 295 "//CascadedCmpNode[@is_pycmp = True]", 296 "//PrimaryCmpNode[@is_pycmp = True]", 297) 298def bytes_cascade(bytes s1, bytes s2): 299 """ 300 >>> bytes_cascade(bstring1, bstring1) 301 True 302 >>> bytes_cascade(bstring1, (bstring1+bstring2)[:len(bstring1)]) 303 True 304 >>> bytes_cascade(bstring1, bstring2) 305 False 306 """ 307 return s1 == s2 == b"abcdefg" 308 309@cython.test_assert_path_exists( 310 "//PrimaryCmpNode", 311 "//PrimaryCmpNode[@is_pycmp = False]", 312) 313def bytes_cascade_untyped_end(bytes s1, bytes s2): 314 """ 315 >>> bytes_cascade_untyped_end(bstring1, bstring1) 316 True 317 >>> bytes_cascade_untyped_end(bstring1, (bstring1+bstring2)[:len(bstring1)]) 318 True 319 >>> bytes_cascade_untyped_end(bstring1, bstring2) 320 False 321 """ 322 return s1 == s2 == b"abcdefg" == (<object>bstring1) == bstring1 323 324 325# basestring 326 327@cython.test_assert_path_exists( 328 "//PrimaryCmpNode", 329 "//PrimaryCmpNode[@is_pycmp = False]", 330) 331def basestring_eq(basestring s1, basestring s2): 332 """ 333 >>> basestring_eq(string1, string1) 334 True 335 >>> basestring_eq(string1, ustring1) 336 True 337 >>> basestring_eq(string1+string2, string1+string2) 338 True 339 >>> basestring_eq(string1+ustring2, ustring1+string2) 340 True 341 >>> basestring_eq(string1, string2) 342 False 343 >>> basestring_eq(string1, ustring2) 344 False 345 >>> basestring_eq(ustring1, string2) 346 False 347 """ 348 return s1 == s2 349 350@cython.test_assert_path_exists( 351 "//PrimaryCmpNode", 352 "//PrimaryCmpNode[@is_pycmp = False]", 353) 354def basestring_neq(basestring s1, basestring s2): 355 """ 356 >>> basestring_neq(string1, string1) 357 False 358 >>> basestring_neq(string1+string2, string1+string2) 359 False 360 >>> basestring_neq(string1+ustring2, ustring1+string2) 361 False 362 >>> basestring_neq(string1, string2) 363 True 364 >>> basestring_neq(string1, ustring2) 365 True 366 >>> basestring_neq(ustring1, string2) 367 True 368 """ 369 return s1 != s2 370 371@cython.test_assert_path_exists( 372 "//PrimaryCmpNode", 373 "//PrimaryCmpNode[@is_pycmp = False]", 374) 375def basestring_str_literal_eq(basestring s): 376 """ 377 >>> basestring_str_literal_eq(string1) 378 True 379 >>> basestring_str_literal_eq((string1+string2)[:len(string1)]) 380 True 381 >>> basestring_str_literal_eq(string2) 382 False 383 """ 384 return s == "abcdefg" 385 386@cython.test_assert_path_exists( 387 "//PrimaryCmpNode", 388 "//PrimaryCmpNode[@is_pycmp = False]", 389) 390def basestring_unicode_literal_eq(basestring s): 391 """ 392 >>> basestring_unicode_literal_eq(string1) 393 True 394 >>> basestring_unicode_literal_eq((string1+string2)[:len(string1)]) 395 True 396 >>> basestring_unicode_literal_eq(string2) 397 False 398 """ 399 return s == u"abcdefg" 400 401@cython.test_assert_path_exists( 402 "//PrimaryCmpNode", 403 "//PrimaryCmpNode[@is_pycmp = False]", 404) 405def basestring_str_literal_neq(basestring s): 406 """ 407 >>> basestring_str_literal_neq(string1) 408 False 409 >>> basestring_str_literal_neq((string1+string2)[:len(string1)]) 410 False 411 >>> basestring_str_literal_neq(string2) 412 True 413 """ 414 return s != "abcdefg" 415 416@cython.test_assert_path_exists( 417 "//PrimaryCmpNode", 418 "//PrimaryCmpNode[@is_pycmp = False]", 419) 420def basestring_unicode_literal_neq(basestring s): 421 """ 422 >>> basestring_unicode_literal_neq(string1) 423 False 424 >>> basestring_unicode_literal_neq((string1+string2)[:len(string1)]) 425 False 426 >>> basestring_unicode_literal_neq(string2) 427 True 428 """ 429 return s != u"abcdefg" 430 431@cython.test_assert_path_exists( 432 "//PrimaryCmpNode", 433 "//PrimaryCmpNode[@is_pycmp = False]", 434 "//CascadedCmpNode[@is_pycmp = False]", 435) 436@cython.test_fail_if_path_exists( 437 "//CascadedCmpNode[@is_pycmp = True]", 438 "//PrimaryCmpNode[@is_pycmp = True]", 439) 440def basestring_cascade_str(basestring s1, basestring s2): 441 """ 442 >>> basestring_cascade_str(string1, string1) 443 True 444 >>> basestring_cascade_str(string1, (string1+string2)[:len(string1)]) 445 True 446 >>> basestring_cascade_str(string1, string2) 447 False 448 """ 449 return s1 == s2 == "abcdefg" 450 451@cython.test_assert_path_exists( 452 "//PrimaryCmpNode", 453 "//PrimaryCmpNode[@is_pycmp = False]", 454 "//CascadedCmpNode[@is_pycmp = False]", 455) 456@cython.test_fail_if_path_exists( 457 "//CascadedCmpNode[@is_pycmp = True]", 458 "//PrimaryCmpNode[@is_pycmp = True]", 459) 460def basestring_cascade_unicode(basestring s1, basestring s2): 461 """ 462 >>> basestring_cascade_unicode(string1, string1) 463 True 464 >>> basestring_cascade_unicode(ustring1, string1) 465 True 466 >>> basestring_cascade_unicode(string1, ustring1) 467 True 468 >>> basestring_cascade_unicode(string1, (string1+string2)[:len(string1)]) 469 True 470 >>> basestring_cascade_unicode(string1, string2) 471 False 472 >>> basestring_cascade_unicode(ustring1, string2) 473 False 474 >>> basestring_cascade_unicode(string1, ustring2) 475 False 476 """ 477 return s1 == s2 == u"abcdefg" 478 479@cython.test_assert_path_exists( 480 "//PrimaryCmpNode", 481 "//PrimaryCmpNode[@is_pycmp = False]", 482) 483def basestring_cascade_untyped_end(basestring s1, basestring s2): 484 """ 485 >>> basestring_cascade_untyped_end(string1, string1) 486 True 487 >>> basestring_cascade_untyped_end(string1, (string1+string2)[:len(string1)]) 488 True 489 >>> basestring_cascade_untyped_end(string1, string2) 490 False 491 """ 492 return s1 == s2 == "abcdefg" == (<object>string1) == string1 493 494 495# untyped/literal comparison 496 497@cython.test_assert_path_exists( 498 "//PrimaryCmpNode", 499 "//PrimaryCmpNode[@is_pycmp = False]", 500) 501def untyped_unicode_literal_eq_bool(s): 502 """ 503 >>> untyped_unicode_literal_eq_bool(string1) 504 True 505 >>> untyped_unicode_literal_eq_bool(ustring1) 506 True 507 >>> untyped_unicode_literal_eq_bool((string1+string2)[:len(string1)]) 508 True 509 >>> untyped_unicode_literal_eq_bool(string2) 510 False 511 >>> untyped_unicode_literal_eq_bool(ustring2) 512 False 513 """ 514 return True if s == u"abcdefg" else False 515 516@cython.test_assert_path_exists( 517 "//PrimaryCmpNode", 518 "//PrimaryCmpNode[@is_pycmp = False]", 519) 520def untyped_str_literal_eq_bool(s): 521 """ 522 >>> untyped_str_literal_eq_bool(string1) 523 True 524 >>> untyped_str_literal_eq_bool(ustring1) 525 True 526 >>> untyped_str_literal_eq_bool((string1+string2)[:len(string1)]) 527 True 528 >>> untyped_str_literal_eq_bool(string2) 529 False 530 >>> untyped_str_literal_eq_bool(ustring2) 531 False 532 """ 533 return True if s == "abcdefg" else False 534 535@cython.test_assert_path_exists( 536 "//PrimaryCmpNode", 537 "//PrimaryCmpNode[@is_pycmp = True]", 538 "//CascadedCmpNode", 539 "//CascadedCmpNode[@is_pycmp = False]", 540) 541@cython.test_fail_if_path_exists( 542 "//CascadedCmpNode[@is_pycmp = True]", 543 "//PrimaryCmpNode[@is_pycmp = False]", 544) 545def untyped_unicode_cascade(s1, unicode s2): 546 """ 547 >>> untyped_unicode_cascade(ustring1, ustring1) 548 True 549 >>> untyped_unicode_cascade(ustring1, (ustring1+ustring2)[:len(ustring1)]) 550 True 551 >>> untyped_unicode_cascade(ustring1, ustring2) 552 False 553 """ 554 return s1 == s2 == u"abcdefg" 555 556@cython.test_assert_path_exists( 557 "//PrimaryCmpNode", 558 "//PrimaryCmpNode[@is_pycmp = False]", 559 "//CascadedCmpNode", 560 "//CascadedCmpNode[@is_pycmp = False]", 561) 562@cython.test_fail_if_path_exists( 563 "//CascadedCmpNode[@is_pycmp = True]", 564 "//PrimaryCmpNode[@is_pycmp = True]", 565) 566def untyped_unicode_cascade_bool(s1, unicode s2): 567 """ 568 >>> untyped_unicode_cascade_bool(ustring1, ustring1) 569 True 570 >>> untyped_unicode_cascade_bool(ustring1, (ustring1+ustring2)[:len(ustring1)]) 571 True 572 >>> untyped_unicode_cascade_bool(ustring1, ustring2) 573 False 574 """ 575 return True if s1 == s2 == u"abcdefg" else False 576 577@cython.test_assert_path_exists( 578 "//PrimaryCmpNode", 579 "//PrimaryCmpNode[@is_pycmp = True]", 580 "//CascadedCmpNode", 581# "//CascadedCmpNode[@is_pycmp = False]", 582) 583@cython.test_fail_if_path_exists( 584 "//CascadedCmpNode[@is_pycmp = True]", 585 "//PrimaryCmpNode[@is_pycmp = False]", 586) 587def untyped_untyped_unicode_cascade_bool(s1, s2): 588 """ 589 >>> untyped_untyped_unicode_cascade_bool(ustring1, ustring1) 590 True 591 >>> untyped_untyped_unicode_cascade_bool(ustring1, (ustring1+ustring2)[:len(ustring1)]) 592 True 593 >>> untyped_untyped_unicode_cascade_bool(ustring1, ustring2) 594 False 595 >>> untyped_untyped_unicode_cascade_bool(string1, string2) 596 False 597 >>> untyped_untyped_unicode_cascade_bool(1, 2) 598 False 599 >>> untyped_untyped_unicode_cascade_bool(1, 1) 600 False 601 """ 602 return True if s1 == s2 == u"abcdefg" else False 603 604 605# bytes/str comparison 606 607@cython.test_assert_path_exists( 608 '//CondExprNode', 609 '//CondExprNode//PrimaryCmpNode', 610 '//CondExprNode//PrimaryCmpNode[@operator = "=="]', 611 '//CondExprNode//PrimaryCmpNode[@operator = "!="]', 612) 613def literal_compare_bytes_str(): 614 """ 615 >>> literal_compare_bytes_str() 616 True 617 """ 618 # we must not constant fold the subexpressions as the result is Py2/3 sensitive 619 return b'abc' != 'abc' if IS_PY3 else b'abc' == 'abc' 620