diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 0000000..0178f02 Binary files /dev/null and b/coverage-report.pdf differ diff --git a/diffusion2d.py b/diffusion2d.py index 51a07f2..de69c7b 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -38,6 +38,12 @@ def __init__(self): self.dt = None def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): + # assertion: float check + assert isinstance(w, float), "w should be a float" + assert isinstance(h, float), "h should be a float" + assert isinstance(dx, float), "dx should be a float" + assert isinstance(dy, float), "dy should be a float" + self.w = w self.h = h self.dx = dx @@ -45,7 +51,12 @@ 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.): + # assertion: float check + assert isinstance(d, float), "d should be a float" + assert isinstance(T_cold, float), "T_cold should be a float" + assert isinstance(T_hot, float), "T_hot should 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..8f87fb4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +numpy +matplotlib +pytest +coverage \ No newline at end of file diff --git a/tests/integration/test_diffusion2d.py b/tests/integration/test_diffusion2d.py index fd026b4..9ca132f 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,46 @@ def test_initialize_physical_parameters(): """ solver = SolveDiffusion2D() + w = 20. + h = 10. + dx = 0.5 + dy = 0.2 + d = 5. + + solver.initialize_domain(w=w, h=h, dx=dx, dy=dy) + solver.initialize_physical_parameters(d=d, T_cold=200., T_hot=800.) + + expected_dt = (dx ** 2 * dy ** 2) / (2 * d * (dx ** 2 + dy ** 2)) + assert solver.dt == pytest.approx(expected_dt) def test_set_initial_condition(): """ Checks function SolveDiffusion2D.get_initial_function """ solver = SolveDiffusion2D() + + w = 20. + h = 10. + dx = 0.5 + dy = 0.2 + d = 5. + T_cold = 200. + T_hot = 800. + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + nx = int(w / dx) + ny = int(h / dy) + + solver.initialize_domain(w=w, h=h, dx=dx, dy=dy) + solver.initialize_physical_parameters(d=d, T_cold=T_cold, T_hot=T_hot) + + u_actual = solver.set_initial_condition() + u_expected = T_cold * np.ones((nx, ny)) + + for i in range(nx): + for j in range(ny): + p2 = (i * dx - cx) ** 2 + (j * dy - cy) ** 2 + if p2 < r2: + u_expected[i, j] = T_hot + + assert np.allclose(u_actual, u_expected), "Integration test failed with set_initial_condition." \ No newline at end of file diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ff..faab7dd 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -3,7 +3,8 @@ """ from diffusion2d import SolveDiffusion2D - +import pytest +import numpy as np def test_initialize_domain(): """ @@ -11,16 +12,72 @@ def test_initialize_domain(): """ solver = SolveDiffusion2D() + w = 20. + h = 10. + dx = 0.5 + dy = 0.2 + + expected_nx = int(w / dx) + expected_ny = int(h / dy) + + solver.initialize_domain(w=w, h=h, dx=dx, dy=dy) + + assert solver.nx == expected_nx + assert solver.ny == expected_ny def test_initialize_physical_parameters(): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.initialize_physical_parameters """ solver = SolveDiffusion2D() + d = 5. + T_cold = 200. + T_hot = 800. + dx = 0.2 + dy = 0.1 + + solver.dx = dx + solver.dy = dy + dx2 = dx * dx + dy2 = dy * dy + expected_dt = dx2 * dy2 / (2 * d * (dx2 + dy2)) + + solver.initialize_physical_parameters(d=d, T_cold=T_cold, T_hot=T_hot) + + assert solver.dt == pytest.approx(expected_dt) def test_set_initial_condition(): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() + + w = 20. + h = 10. + dx = 0.5 + dy = 0.2 + T_cold = 200. + T_hot = 800. + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + + solver.w = w + solver.h = h + solver.dx = dx + solver.dy = dy + solver.T_cold = T_cold + solver.T_hot = T_hot + solver.nx = int(w / dx) + solver.ny = int(h / dy) + + u_actual = solver.set_initial_condition() + u_expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + + for i in range(solver.nx): + for j in range(solver.ny): + p2 = (i * solver.dx - cx) ** 2 + (j * solver.dy - cy) ** 2 + if p2 < r2: + u_expected[i, j] = solver.T_hot + + assert np.allclose(u_actual, u_expected), "Unit test failed with set_initial_condition." \ No newline at end of file diff --git a/tox.toml b/tox.toml new file mode 100644 index 0000000..5bf687d --- /dev/null +++ b/tox.toml @@ -0,0 +1,11 @@ +[tox] +env_list = ["test_env"] +no_package = true + +[testenv] +deps = ["-rrequirements.txt"] + +commands = [ + ["coverage", "run", "-m", "pytest"], + ["coverage", "report", "-m"] +] \ No newline at end of file