rithm 14.6.0

Arbitrary precision arithmetic.
Documentation
from hypothesis import given

from rithm.enums import Endianness
from rithm.integer import Int
from tests.utils import IntWithBuiltin

from . import strategies


@given(strategies.ints, strategies.endianesses)
def test_basic(int_: Int, endianness: Endianness) -> None:
    result = int_.to_bytes(endianness)

    assert isinstance(result, bytes)


@given(strategies.ints, strategies.endianesses)
def test_round_trip(int_: Int, endianness: Endianness) -> None:
    result = int_.to_bytes(endianness)

    assert Int.from_bytes(result, endianness) == int_


@given(strategies.ints_with_builtins, strategies.endianesses)
def test_connection_with_builtin(
    int_with_builtin: IntWithBuiltin, endianness: Endianness
) -> None:
    int_, builtin_int = int_with_builtin

    assert int_.to_bytes(endianness) == builtin_int.to_bytes(
        to_bytes_count(builtin_int),
        'big' if endianness is Endianness.BIG else 'little',
        signed=True,
    )


def to_bytes_count(value: int) -> int:
    return (8 + (value + (value < 0)).bit_length()) // 8