# pytest hilft uns beim Testen und Vergleichen von Kommazahlen. import pytest # Wir importieren die Funktionen, die wir testen möchten. from matrixmania import project_ortho, project_perspective def test_project_ortho_without_scaling(): """Prüft die orthogonale Projektion mit Standardwerten.""" # Arrange: Einen 3D-Punkt vorbereiten. point = (1.0, 2.0, 3.0) # Act: Ohne zusätzliche Skalierung projizieren. result = project_ortho(point) # Assert: x und y bleiben gleich, z fällt weg. assert result == (1.0, 2.0) def test_project_ortho_with_scaling(): """Prüft die orthogonale Projektion mit Skalierung 100.""" # Arrange: Einen 3D-Punkt vorbereiten. point = (1.0, 2.0, 3.0) # Act: Mit Skalierungsfaktor 100 projizieren. result = project_ortho(point, scale=100) # Assert: x und y werden jeweils mit 100 multipliziert. assert result == (100.0, 200.0) def test_project_perspective_without_scaling(): """Prüft die perspektivische Projektion mit Standardwerten.""" # Arrange: Einen 3D-Punkt vorbereiten. point = (1.0, 2.0, 3.0) # Act: Die Standardwerte der Funktion verwenden. result = project_perspective(point) # Assert: Die Tiefe ist z + camera_distance = 3 + 4 = 7. # Deshalb erwarten wir x = 1/7 und y = 2/7. assert result == pytest.approx((1 / 7, 2 / 7)) def test_project_perspective_with_focal_length_and_scaling(): """Prüft die Projektion mit Brennweite 2 und Skalierung 100.""" # Arrange: Einen 3D-Punkt vorbereiten. point = (1.0, 2.0, 3.0) # Act: Brennweite 2 und Skalierungsfaktor 100 verwenden. result = project_perspective(point, focal_length=2, scale=100) # Assert: Die Tiefe ist weiterhin 7. # x = 1 * 2 / 7 * 100 = 200/7. # y = 2 * 2 / 7 * 100 = 400/7. assert result == pytest.approx((200 / 7, 400 / 7)) def test_project_perspective_with_custom_camera_distance(): """Prüft die Projektion mit einem anderen Kameraabstand.""" # Arrange: Punkt und erwartetes Ergebnis vorbereiten. # Die Tiefe ist z + camera_distance = 3 + 1 = 4. point = (1.0, 2.0, 3.0) expected = (0.25, 0.5) # Act: Den Kameraabstand auf 1 setzen. result = project_perspective(point, camera_distance=1.0) # Assert: x = 1/4 und y = 2/4. assert result == pytest.approx(expected) def test_project_perspective_with_zero_scale(): """Prüft die Projektion mit Skalierungsfaktor 0.""" # Arrange: Einen gültigen 3D-Punkt vorbereiten. point = (1.0, 2.0, 3.0) # Act: Den Skalierungsfaktor auf 0 setzen. result = project_perspective(point, scale=0.0) # Assert: Beide Koordinaten werden mit 0 multipliziert. assert result == pytest.approx((0.0, 0.0))