Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TST: generic surfaces #693

Merged
merged 5 commits into from
Sep 20, 2024
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
"tests.fixtures.monte_carlo.stochastic_fixtures",
"tests.fixtures.monte_carlo.stochastic_motors_fixtures",
"tests.fixtures.sensors.sensors_fixtures",
"tests.fixtures.generic_surfaces.generic_surfaces_fixtures",
]


Expand Down
Empty file.
42 changes: 42 additions & 0 deletions tests/fixtures/generic_surfaces/generic_surfaces_fixtures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import pandas as pd
import pytest


@pytest.fixture(scope="session")
def filename_valid_coeff(tmpdir_factory):
"""Creates temporary files used to test if generic surfaces
initializes correctly from CSV files"""
filename = tmpdir_factory.mktemp("aero_surface_data").join("valid_coefficients.csv")
pd.DataFrame(
{
"alpha": [0, 1, 2, 3, 0.1],
"mach": [3, 2, 1, 0, 0.2],
"cL": [4, 2, 2, 4, 5],
}
).to_csv(filename, index=False)

return filename


@pytest.fixture(
params=(
{
"alpha": [0, 1, 2, 3, 0.1],
"cL": [4, 2, 2, 4, 5],
"mach": [3, 2, 1, 0, 0.2],
},
{
"a": [0, 1, 2, 3, 0.1],
"b": [4, 2, 2, 4, 5],
},
)
)
def filename_invalid_coeff(tmpdir_factory, request):
"""Creates temporary CSV files used to test if generic surfaces
raises errors when initialized incorrectly from CSV files"""
filename = tmpdir_factory.mktemp("aero_surface_data").join(
"tmp_invalid_coefficients.csv"
)
pd.DataFrame(request.param).to_csv(filename, index=False)

return filename
91 changes: 91 additions & 0 deletions tests/unit/test_generic_surfaces.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import pytest

from rocketpy import Function, GenericSurface
from rocketpy.mathutils import Vector

REFERENCE_AREA = 1
REFERENCE_LENGTH = 1


@pytest.mark.parametrize(
"coefficients",
[
"cL",
{"invalid_name": 0},
{"cL": "inexistent_file.csv"},
{"cL": Function(lambda x1, x2, x3, x4, x5, x6: 0)},
{"cL": lambda x1: 0},
{"cL": {}},
],
)
def test_invalid_initialization(coefficients):
"""Checks if generic surface raises errors in initialization
when coefficient argument is invalid"""

with pytest.raises((ValueError, TypeError)):
GenericSurface(
reference_area=REFERENCE_AREA,
reference_length=REFERENCE_LENGTH,
coefficients=coefficients,
)


def test_invalid_initialization_from_csv(filename_invalid_coeff):
"""Checks if generic surfaces raises errors when initialized incorrectly
from a csv file"""
with pytest.raises(ValueError):
GenericSurface(
reference_area=REFERENCE_AREA,
reference_length=REFERENCE_LENGTH,
coefficients={"cL": str(filename_invalid_coeff)},
)


@pytest.mark.parametrize(
"coefficients",
[
{},
{"cL": 0},
{
"cL": 0,
"cQ": Function(lambda x1, x2, x3, x4, x5, x6, x7: 0),
"cD": lambda x1, x2, x3, x4, x5, x6, x7: 0,
},
],
)
def test_valid_initialization(coefficients):
"""Checks if generic surface initializes correctly when coefficient
argument is valid"""

GenericSurface(
reference_area=REFERENCE_AREA,
reference_length=REFERENCE_LENGTH,
coefficients=coefficients,
)


def test_valid_initialization_from_csv(filename_valid_coeff):
"""Checks if generic surfaces initializes correctly when
coefficients is set from a csv file"""
GenericSurface(
reference_area=REFERENCE_AREA,
reference_length=REFERENCE_LENGTH,
coefficients={"cL": str(filename_valid_coeff)},
)


def test_compute_forces_and_moments():
"""Checks if there are not logical errors in
compute forces and moments"""

gs_object = GenericSurface(REFERENCE_AREA, REFERENCE_LENGTH, {})
forces_and_moments = gs_object.compute_forces_and_moments(
stream_velocity=Vector((0, 0, 0)),
stream_speed=0,
stream_mach=0,
rho=0,
cp=Vector((0, 0, 0)),
omega=(0, 0, 0),
reynolds=0,
)
assert forces_and_moments == (0, 0, 0, 0, 0, 0)
Loading