(self)
| 1401 | |
| 1402 | @unittest.expectedFailure # TODO: RUSTPYTHON |
| 1403 | def test_from_bytes(self): |
| 1404 | def check(tests, byteorder, signed=False): |
| 1405 | def equivalent_python(byte_array, byteorder, signed=False): |
| 1406 | if byteorder == 'little': |
| 1407 | little_ordered = list(byte_array) |
| 1408 | elif byteorder == 'big': |
| 1409 | little_ordered = list(reversed(byte_array)) |
| 1410 | |
| 1411 | n = sum(b << i*8 for i, b in enumerate(little_ordered)) |
| 1412 | if signed and little_ordered and (little_ordered[-1] & 0x80): |
| 1413 | n -= 1 << 8*len(little_ordered) |
| 1414 | |
| 1415 | return n |
| 1416 | |
| 1417 | for test, expected in tests.items(): |
| 1418 | try: |
| 1419 | self.assertEqual( |
| 1420 | int.from_bytes(test, byteorder, signed=signed), |
| 1421 | expected) |
| 1422 | except Exception as err: |
| 1423 | raise AssertionError( |
| 1424 | "failed to convert {} with byteorder={!r} and signed={}" |
| 1425 | .format(test, byteorder, signed)) from err |
| 1426 | |
| 1427 | # Test for all default arguments. |
| 1428 | if byteorder == 'big' and not signed: |
| 1429 | try: |
| 1430 | self.assertEqual( |
| 1431 | int.from_bytes(test), |
| 1432 | expected) |
| 1433 | except Exception as err: |
| 1434 | raise AssertionError( |
| 1435 | "failed to convert {} with default arguments" |
| 1436 | .format(test)) from err |
| 1437 | |
| 1438 | try: |
| 1439 | self.assertEqual( |
| 1440 | equivalent_python(test, byteorder, signed=signed), |
| 1441 | expected |
| 1442 | ) |
| 1443 | except Exception as err: |
| 1444 | raise AssertionError( |
| 1445 | "Code equivalent from docs is not equivalent for " |
| 1446 | "conversion of {0} with byteorder={1!r} and signed={2}" |
| 1447 | .format(test, byteorder, signed)) from err |
| 1448 | |
| 1449 | # Convert signed big-endian byte arrays to integers. |
| 1450 | tests1 = { |
| 1451 | b'': 0, |
| 1452 | b'\x00': 0, |
| 1453 | b'\x00\x00': 0, |
| 1454 | b'\x01': 1, |
| 1455 | b'\x00\x01': 1, |
| 1456 | b'\xff': -1, |
| 1457 | b'\xff\xff': -1, |
| 1458 | b'\x81': -127, |
| 1459 | b'\x80': -128, |
| 1460 | b'\xff\x7f': -129, |
nothing calls this directly
no test coverage detected