rustpy 0.3.0

Bindings of Rust programming language primitives.
Documentation
from contextlib import suppress
from typing import Tuple

from hypothesis import given

from tests.utils import (Integer,
                         equivalence)
from . import strategies


@given(strategies.signed_integers)
def test_basic(integer: Integer) -> None:
    with suppress(OverflowError):
        result = integer.abs()

        assert isinstance(result, type(integer))


@given(strategies.signed_integers)
def test_idempotence(integer: Integer) -> None:
    with suppress(OverflowError):
        result = integer.abs()

        assert result == result.abs()


@given(strategies.signed_integers_with_zeros)
def test_positive_definiteness(integer_with_zero: Integer) -> None:
    integer, zero = integer_with_zero

    with suppress(OverflowError):
        result = integer.abs()

        assert equivalence(result == zero, integer == zero)


@given(strategies.signed_integers)
def test_evenness(integer: Integer) -> None:
    with suppress(OverflowError):
        result = integer.abs()

        assert result == (-integer).abs()


@given(strategies.signed_integers_pairs)
def test_multiplicativity(pair: Tuple[Integer, Integer]) -> None:
    first, second = pair

    with suppress(OverflowError):
        result = (first * second).abs()

        assert result == first.abs() * second.abs()


@given(strategies.signed_integers_pairs)
def test_triangle_inequality(pair: Tuple[Integer, Integer]) -> None:
    first, second = pair

    with suppress(OverflowError):
        result = (first + second).abs()

        assert result <= first.abs() + second.abs()


@given(strategies.signed_integers_pairs)
def test___mul___operand(pair: Tuple[Integer, Integer]) -> None:
    first, second = pair

    with suppress(OverflowError):
        assert (first * second).abs() == first.abs() * second.abs()


@given(strategies.divisible_signed_integers_pairs)
def test___truediv___operand(pair: Tuple[Integer, Integer]) -> None:
    first, second = pair

    with suppress(OverflowError):
        result = (first / second).abs()
        alternative = first.abs() / second.abs()

        assert result == alternative