96 lines
1.9 KiB
Python
96 lines
1.9 KiB
Python
from math import pi
|
|
|
|
import pytest
|
|
|
|
from matrixmania import rot_2D, rot_3D
|
|
|
|
|
|
def test_rot_2D_90_degrees():
|
|
# Arrange
|
|
angle = pi / 2
|
|
expected = [
|
|
[0.0, -1.0],
|
|
[1.0, 0.0],
|
|
]
|
|
|
|
# Act
|
|
result = rot_2D(angle)
|
|
|
|
# Assert
|
|
assert len(result) == len(expected)
|
|
for actual_row, expected_row in zip(result, expected):
|
|
assert actual_row == pytest.approx(expected_row)
|
|
|
|
|
|
def test_rot_2D_invalid_angle():
|
|
# Arrange
|
|
angle = "ungueltig"
|
|
|
|
# Act & Assert:
|
|
# Aufruf ausführen und prüfen, dass ein TypeError entsteht.
|
|
with pytest.raises(TypeError):
|
|
rot_2D(angle)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"axis, expected",
|
|
[
|
|
(
|
|
"x",
|
|
[
|
|
[1.0, 0.0, 0.0],
|
|
[0.0, 0.0, -1.0],
|
|
[0.0, 1.0, 0.0],
|
|
],
|
|
),
|
|
(
|
|
"y",
|
|
[
|
|
[0.0, 0.0, 1.0],
|
|
[0.0, 1.0, 0.0],
|
|
[-1.0, 0.0, 0.0],
|
|
],
|
|
),
|
|
(
|
|
"z",
|
|
[
|
|
[0.0, -1.0, 0.0],
|
|
[1.0, 0.0, 0.0],
|
|
[0.0, 0.0, 1.0],
|
|
],
|
|
),
|
|
],
|
|
)
|
|
def test_rot_3D_90_degrees(axis, expected):
|
|
# Arrange
|
|
angle = pi / 2
|
|
|
|
# Act
|
|
result = rot_3D(angle, axis)
|
|
|
|
# Assert
|
|
assert len(result) == len(expected)
|
|
for actual_row, expected_row in zip(result, expected):
|
|
assert actual_row == pytest.approx(expected_row)
|
|
|
|
|
|
@pytest.mark.parametrize("axis", ["a", "", "X"])
|
|
def test_rot_3D_invalid_axis(axis):
|
|
# Arrange
|
|
angle = pi / 2
|
|
|
|
# Act & Assert:
|
|
# Aufruf ausführen und den erwarteten ValueError prüfen.
|
|
with pytest.raises(ValueError):
|
|
rot_3D(angle, axis)
|
|
|
|
|
|
def test_rot_3D_invalid_angle():
|
|
# Arrange
|
|
angle = "ungueltig"
|
|
axis = "x"
|
|
|
|
# Act & Assert:
|
|
# Aufruf ausführen und den erwarteten TypeError prüfen.
|
|
with pytest.raises(TypeError):
|
|
rot_3D(angle, axis) |