structure redefined and tests implemented
This commit is contained in:
1 parent
7c2e2782ec
commit
b5c3ce3308
10 files changed
+387
-270
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,78 @@
|
||||
"""Tests für die Rotationsfunktionen."""
|
||||
|
||||
import math
|
||||
|
||||
import pytest
|
||||
|
||||
from matrixmania.compute import rot_2d, rot_3d
|
||||
|
||||
|
||||
def _flatten(matrix: list[list[float]]) -> list[float]:
|
||||
"""Flacht eine Matrix zu einer flachen Liste ab.
|
||||
|
||||
Args:
|
||||
matrix (list[list[float]]): Zu flachende Matrix.
|
||||
|
||||
Returns:
|
||||
list[float]: Alle Matrixelemente in Zeilen-Reihenfolge.
|
||||
"""
|
||||
return [value for row in matrix for value in row]
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("angle", "expected"),
|
||||
[
|
||||
(0.0, [1.0, 0.0, 0.0, 1.0]),
|
||||
(math.pi / 2, [0.0, -1.0, 1.0, 0.0]),
|
||||
(math.pi, [-1.0, 0.0, 0.0, -1.0]),
|
||||
(2 * math.pi, [1.0, 0.0, 0.0, 1.0]),
|
||||
],
|
||||
)
|
||||
def test_rot_2d(angle: float, expected: list[float]) -> None:
|
||||
"""Prüft die 2D-Rotationsmatrix für einen Winkel.
|
||||
|
||||
Args:
|
||||
angle (float): Drehwinkel im Bogenmaß.
|
||||
expected (list[float]): Erwartete Matrixwerte in Zeilen-Reihenfolge.
|
||||
|
||||
Raises:
|
||||
AssertionError: Wenn die Rotationsmatrix nicht erwartet wird.
|
||||
"""
|
||||
# Arrange: Winkel und Erwartungswerte stammen aus der Parametrisierung.
|
||||
|
||||
# Act
|
||||
result = _flatten(rot_2d(angle))
|
||||
|
||||
# Assert
|
||||
assert result == pytest.approx(expected)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
("angle", "axis", "expected"),
|
||||
[
|
||||
(0.0, "x", [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]),
|
||||
(0.0, "y", [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]),
|
||||
(0.0, "z", [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]),
|
||||
(math.pi / 2, "x", [1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 1.0, 0.0]),
|
||||
(math.pi / 2, "y", [0.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 0.0]),
|
||||
(math.pi / 2, "z", [0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]),
|
||||
],
|
||||
)
|
||||
def test_rot_3d(angle: float, axis: str, expected: list[float]) -> None:
|
||||
"""Prüft die 3D-Rotationsmatrix für einen Winkel und eine Achse.
|
||||
|
||||
Args:
|
||||
angle (float): Drehwinkel im Bogenmaß.
|
||||
axis (str): Rotationsachse ("x", "y" oder "z").
|
||||
expected (list[float]): Erwartete Matrixwerte in Zeilen-Reihenfolge.
|
||||
|
||||
Raises:
|
||||
AssertionError: Wenn die Rotationsmatrix nicht erwartet wird.
|
||||
"""
|
||||
# Arrange: Winkel, Achse und Erwartungswerte stammen aus der Parametrisierung.
|
||||
|
||||
# Act
|
||||
result = _flatten(rot_3d(angle, axis))
|
||||
|
||||
# Assert
|
||||
assert result == pytest.approx(expected)
|
||||
Reference in new issue
Block a user