From 3674821d25f3a792954e268b8478049b7c2f2bec Mon Sep 17 00:00:00 2001 From: Isaak Lux Date: Wed, 14 Jan 2026 22:56:04 +0100 Subject: [PATCH] Tasks for python testing exercise --- coverage-report.pdf | Bin 0 -> 70109 bytes diffusion2d.py | 9 +++- requirements.txt | 3 ++ tests/integration/test_diffusion2d.py | 36 +++++++++++++- tests/unit/test_diffusion2d_functions.py | 57 +++++++++++++++++++++++ tox.toml | 7 +++ 6 files changed, 110 insertions(+), 2 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..f42160bcdcca4d7ccdafab98d7dad0b31c9c21f9 GIT binary patch literal 70109 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%0A#Y7@3TVI5AdctOKJ%^&dv^BBph5gPY&9Gdns+d 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 Jv)+k<`Zt!Q>c#*7 literal 0 HcmV?d00001 diff --git a/diffusion2d.py b/diffusion2d.py index 51a07f2..17bc002 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -38,6 +38,10 @@ def __init__(self): self.dt = None def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): + assert isinstance(w, float), "w must be a float" + assert isinstance(h, float), "h must be a float" + assert isinstance(dx, float), "dx must be a float" + assert isinstance(dy, float), "dy must be a float" self.w = w self.h = h self.dx = dx @@ -45,7 +49,10 @@ def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): self.nx = int(w / dx) self.ny = int(h / dy) - def initialize_physical_parameters(self, d=4., T_cold=300, T_hot=700): + def initialize_physical_parameters(self, d=4., T_cold=300., T_hot=700.): + assert isinstance(d, float), "d must be a float" + assert isinstance(T_cold, float), "T_cold must be a float" + assert isinstance(T_hot, float), "T_hot must be a float" self.D = d self.T_cold = T_cold self.T_hot = T_hot diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..7851745 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pytest +numpy +matplotlib \ No newline at end of file diff --git a/tests/integration/test_diffusion2d.py b/tests/integration/test_diffusion2d.py index fd026b4..9278aae 100644 --- a/tests/integration/test_diffusion2d.py +++ b/tests/integration/test_diffusion2d.py @@ -3,7 +3,8 @@ """ from diffusion2d import SolveDiffusion2D - +import pytest +import numpy as np def test_initialize_physical_parameters(): """ @@ -11,9 +12,42 @@ def test_initialize_physical_parameters(): """ solver = SolveDiffusion2D() + expected_dt = 0.0005 + + solver.initialize_domain(10., 10., 0.1, 0.1) + solver.initialize_physical_parameters(5.,350.,750.) + + assert solver.dt == pytest.approx(expected_dt, abs=1e-4) + def test_set_initial_condition(): """ Checks function SolveDiffusion2D.get_initial_function """ solver = SolveDiffusion2D() + + w = 20. + h = 20. + dx = 0.2 + dy = 0.2 + nx = int(w / dx) + ny = int(h / dy) + T_cold = 350. + T_hot = 750. + + u = T_cold * np.ones((nx, ny)) + + # Initial conditions - circle of radius r centred at (cx,cy) (mm) + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + for i in range(nx): + for j in range(ny): + p2 = (i * dx - cx) ** 2 + (j * dy - cy) ** 2 + if p2 < r2: + u[i, j] = T_hot + + solver.initialize_domain(w, h, dx, dy) + solver.initialize_physical_parameters(5., 350., 750.) + solver_u = solver.set_initial_condition() + + assert solver_u == pytest.approx(u, abs=1e-4) diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ff..7fb6507 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -1,6 +1,8 @@ """ Tests for functions in class SolveDiffusion2D """ +import numpy as np +import pytest from diffusion2d import SolveDiffusion2D @@ -10,6 +12,17 @@ def test_initialize_domain(): Check function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + w = 20. + h = 20. + dx=0.2 + dy=0.2 + + expected_nx = 100 + expected_ny = 100 + + solver.initialize_domain(w,h,dx,dy) + assert solver.nx == expected_nx, "value of nx is wrong, did the calculation change?" + assert solver.ny == expected_ny, "value of ny is wrong, did the calculation change?" def test_initialize_physical_parameters(): @@ -18,9 +31,53 @@ def test_initialize_physical_parameters(): """ solver = SolveDiffusion2D() + d = 5. + T_cold = 350. + T_hot = 750. + solver.dx = 0.1 + solver.dy = 0.1 + + expected_dt = 0.0005 + + solver.initialize_physical_parameters(d, T_cold, T_hot) + assert solver.dt == pytest.approx(expected_dt, abs=1e-4) + def test_set_initial_condition(): """ Checks function SolveDiffusion2D.get_initial_function """ solver = SolveDiffusion2D() + + w = 20. + h = 20. + dx = 0.2 + dy = 0.2 + nx = int(w / dx) + ny = int(h / dy) + T_cold = 350. + T_hot = 750. + + u = T_cold * np.ones((nx, ny)) + + # Initial conditions - circle of radius r centred at (cx,cy) (mm) + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + for i in range(nx): + for j in range(ny): + p2 = (i * dx - cx) ** 2 + (j * dy - cy) ** 2 + if p2 < r2: + u[i, j] = T_hot + + solver.T_cold = T_cold + solver.T_hot = T_hot + solver.w = w + solver.h = h + solver.dx = dx + solver.dy = dy + solver.nx = nx + solver.ny = ny + + solver_u = solver.set_initial_condition() + + assert solver_u == pytest.approx(u, abs=1e-4) diff --git a/tox.toml b/tox.toml new file mode 100644 index 0000000..e7f4fac --- /dev/null +++ b/tox.toml @@ -0,0 +1,7 @@ +requires = ["tox>=4"] +env_list = ["pytest_testing"] + +[env.pytest_testing] +description = "Run pytest" +deps = ["-rrequirements.txt"] +commands = [["python", "-m", "pytest"]] \ No newline at end of file