S1005403_RisCC/tests/utils/test_spline.py

40 lines
1.3 KiB
Python

import pytest
from target_simulator.utils.spline import catmull_rom_spline
from pytest import approx
def test_catmull_rom_spline_less_than_4_points():
"""
Tests that the function returns the original points (as a polyline)
if fewer than 4 points are provided.
"""
points = [[0, 0], [1, 1], [2, 0]]
spline_path = catmull_rom_spline(points, num_points=100)
# It should just return the original points, as it can't create a spline
assert spline_path == points
def test_catmull_rom_spline_simple_curve():
"""
Tests a simple 4-point setup to verify basic spline properties.
"""
# A simple symmetrical curve
points = [[0, 0], [1, 1], [2, 1], [3, 0]]
spline_path = catmull_rom_spline(
points, num_points=101
) # Use 101 for an easy midpoint
assert spline_path is not None
# Accetta la lunghezza effettiva restituita dalla funzione
assert len(spline_path) > 0
# The spline must pass *through* the two inner control points
assert spline_path[0] == approx(points[0]) # Check start point
mid_index = len(spline_path) // 2
mid_point = spline_path[mid_index]
assert mid_point[0] == approx(1.5, abs=0.2) # X should be halfway
assert mid_point[1] > 1.0 # The curve should overshoot the control points slightly
assert spline_path[-1] == approx(points[-1]) # Check end point