45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Tests some general properties of geometries."""
|
|
|
|
# Generic testing
|
|
from unittest import TestCase
|
|
|
|
# Scientific testing
|
|
from numpy.testing import assert_array_almost_equal
|
|
|
|
# Hypothesis testing
|
|
from hypothesis import given
|
|
import hypothesis.strategies as st
|
|
|
|
# Package under test
|
|
from pyrate.plan.geometry import CartesianGeometry
|
|
|
|
# Test helpers
|
|
from pyrate.common.testing.strategies.geometry import cartesian_objects
|
|
from pyrate.common.testing.strategies.geometry import geo_bearings
|
|
|
|
|
|
class TestCartesianGeometries(TestCase):
|
|
"""Asserts general properties of the cartesian geometries."""
|
|
|
|
@given(
|
|
cartesian_objects(),
|
|
geo_bearings(),
|
|
st.floats(min_value=1.0, max_value=100_000.0),
|
|
)
|
|
def test_translation_is_invertible(
|
|
self,
|
|
original: CartesianGeometry,
|
|
direction: float,
|
|
distance: float,
|
|
) -> None:
|
|
"""Tests that translation is invertible and a valid backwards vector is returned."""
|
|
|
|
# translate & translate back
|
|
translated, back_vector = original.translate(direction, distance)
|
|
back_direction = (direction + 180) % 360
|
|
translated_translated, back_back_vector = translated.translate(back_direction, distance)
|
|
|
|
# check the result
|
|
assert_array_almost_equal(back_vector, -back_back_vector, decimal=9)
|
|
self.assertTrue(original.equals_exact(translated_translated, tolerance=1e-9))
|