(value1, value2)
| 502 | |
| 503 | |
| 504 | def _compare_values(value1, value2): |
| 505 | code1 = _code_for(value1) |
| 506 | code2 = _code_for(value2) |
| 507 | |
| 508 | if code1 < code2: |
| 509 | return -1 |
| 510 | elif code1 > code2: |
| 511 | return 1 |
| 512 | |
| 513 | # Compatible types. |
| 514 | if code1 == NULL_CODE: |
| 515 | return 0 |
| 516 | elif code1 == STRING_CODE: |
| 517 | encoded1 = value1.encode('utf-8') |
| 518 | encoded2 = value2.encode('utf-8') |
| 519 | return -1 if encoded1 < encoded2 else 0 if encoded1 == encoded2 else 1 |
| 520 | elif code1 == FLOAT_CODE: |
| 521 | f1 = value1 if isinstance(value1, SingleFloat) else SingleFloat(value1.value) |
| 522 | f2 = value2 if isinstance(value2, SingleFloat) else SingleFloat(value2.value) |
| 523 | return -1 if f1 < f2 else 0 if f1 == f2 else 1 |
| 524 | elif code1 == DOUBLE_CODE: |
| 525 | d1 = value1.value if isinstance(value1, ctypes.c_double) else value1 |
| 526 | d2 = value2.value if isinstance(value2, ctypes.c_double) else value2 |
| 527 | return _compare_floats(d1, d2) |
| 528 | elif code1 == NESTED_CODE: |
| 529 | return compare(value1, value2) |
| 530 | else: |
| 531 | # Booleans, UUIDs, integers, and Versionstamps can just use standard comparison. |
| 532 | return -1 if value1 < value2 else 0 if value1 == value2 else 1 |
| 533 | |
| 534 | |
| 535 | # compare element by element and return -1 if t1 < t2 or 1 if t1 > t2 or 0 if t1 == t2 |
no test coverage detected