40 lines
1.3 KiB
Python
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
|