rustpy 0.3.0

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

from hypothesis import given

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


@given(strategies.finite_floats)
def test_basic(float_: Float) -> None:
    result = float_.abs()

    assert isinstance(result, type(float_))


@given(strategies.finite_floats)
def test_idempotence(float_: Float) -> None:
    result = float_.abs()

    assert result == result.abs()


@given(strategies.finite_floats_with_zeros)
def test_positive_definiteness(float_with_zero: Float) -> None:
    float_, zero = float_with_zero

    result = float_.abs()

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


@given(strategies.finite_floats)
def test_evenness(float_: Float) -> None:
    result = float_.abs()

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


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

    result = (first * second).abs()

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


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

    result = (first + second).abs()

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


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

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


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

    result = (first / second).abs()
    alternative = first.abs() / second.abs()

    assert result.is_nan() and alternative.is_nan() or result == alternative