From e325fca8ad6895deb9bcee034e57ef45da4b637c Mon Sep 17 00:00:00 2001 From: NDM14 Date: Tue, 20 Jan 2026 17:48:50 +0100 Subject: [PATCH] - added unittests for the methods initialize_domain, test_initialize_physical_parameters and set_initial_condition to test them properly - added integration tests for test_initialize_physical_parameters and test_set_initial_condition to test them in the whole environment - added tox.toml to automate testing and testcoverage - tested coverage and added report to see the coverage --- coverage-report.pdf | Bin 0 -> 17152 bytes diffusion2d.py | 19 +++++--- requirements.txt | 5 +++ tests/integration/test_diffusion2d.py | 33 ++++++++++++-- tests/unit/test_diffusion2d_functions.py | 53 ++++++++++++++++++++--- tox.toml | 15 +++++++ 6 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 coverage-report.pdf create mode 100644 requirements.txt create mode 100644 tox.toml diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..01c4b60721c21564b6c409f29ce29eeb9db5af0b GIT binary patch literal 17152 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 mot+|Iu= T_cold) + assert numpy.all(u <= T_hot) + assert u[int(cx/solver.dx), int(cy/solver.dy)] == T_hot diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ff..6cae834 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -2,25 +2,68 @@ Tests for functions in class SolveDiffusion2D """ +from unittest.mock import MagicMock from diffusion2d import SolveDiffusion2D +import pytest +import numpy -def test_initialize_domain(): + +@pytest.mark.parametrize(("width", "height", "dx", "dy", "expected_dx", "expected_dy"), + [(11.0,12.0,0.5,0.3, 22, 40)] +) +def test_initialize_domain(width, height, dx, dy, expected_dx, expected_dy): """ Check function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + solver.initialize_domain(width, height, dx, dy) + assert solver.nx == expected_dx + assert solver.ny == expected_dy - -def test_initialize_physical_parameters(): +@pytest.mark.parametrize( + ("d", "T_cold", "T_hot", "expected_dt"), + [(5.0, 321.0, 723.0, 0.0005)] +) +def test_initialize_physical_parameters(d, T_cold, T_hot, expected_dt): """ Checks function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + solver.w = 10.0 + solver.h = 10.0 + solver.dx = 0.1 + solver.dy = 0.1 + solver.nx = 100 + solver.ny = 100 + + dt = solver.initialize_physical_parameters(d, T_cold, T_hot) + + solver.dt == pytest.approx(expected_dt, rel=1e-4) - -def test_set_initial_condition(): + +@pytest.mark.parametrize(("T_cold", "T_hot"), + [(302.0, 700.0)]) +def test_set_initial_condition(T_cold, T_hot): """ Checks function SolveDiffusion2D.get_initial_function """ + solver = SolveDiffusion2D() + solver.T_cold = T_cold + solver.T_hot = T_hot + solver.w = 10.0 + solver.h = 10.0 + solver.dx = 0.1 + solver.dy = 0.1 + solver.nx = 100 + solver.ny = 100 + + u = solver.set_initial_condition() + assert u.shape == (solver.nx, solver.ny) + assert numpy.all(u >= T_cold) + assert numpy.all(u <= T_hot) + assert u[50, 50] == T_hot + +def test_time_step(): + assert True \ No newline at end of file diff --git a/tox.toml b/tox.toml new file mode 100644 index 0000000..f2a2161 --- /dev/null +++ b/tox.toml @@ -0,0 +1,15 @@ +[tox] +env_list = ["pytest", "report"] +requires = ["tox>=4.0"] + +["testenv:pytest"] +description = "run pytest" +deps = ["-rrequirements.txt"] +commands = ["python3", "-m" ,"pytest"] + +["testenv:report"] +deps = ["-rrequirements.txt"] +commands = [ + ["coverage", "report"], + ["coverage", "json"] +] \ No newline at end of file