diff --git a/.coverage b/.coverage new file mode 100644 index 00000000..be21b142 Binary files /dev/null and b/.coverage differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..f166a8a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +tests/unit/__pycache__/ +tests/integration/__pycache__/ +tests/__pycache__/ +__pycache__/ +.DS_Store diff --git a/README.md b/README.md index da66993c..15be3317 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,16 @@ Please follow the instructions in [python_testing_exercise.md](https://github.co ## Test logs (for submission) -### pytest log - -### unittest log +| Test Type | Tool | Method | Log File | +|------------|---------| ---------| ---------| +| Unit Test | pytest |initialize_domain|[Link](log/failed_test_initialize_domain.log) | +| Unit Test | pytest |initialize_physical_parameters|[Link](log/failed_test_initialize_physical_parameters.log) | +| Unit Test | pytest |set_initial_condition|[Link](log/failed_test_set_initial_condition.log) | +| Unit Test | unittest |initialize_domain|[Link](log/failed_unittest_initialize_domain.log) | +| Unit Test | unittest |initialize_physical_parameters|[Link](log/failed_unittest_initialize_physical_parameters.log) | +| Unit Test | unittest |set_initial_condition|[Link](log/failed_unittest_set_initial_condition.log) | +| Integration Test | pytest |initialize_physical_parameters|[Link](log/failed_intergration_initialize_physical_parameters.log) | +| Integration Test | pytest |set_initial_condition|[Link](log/failed_intergration_test_set_initial_condition.log) | ## Citing diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 00000000..2e691d6d Binary files /dev/null and b/coverage-report.pdf differ diff --git a/diffusion2d.py b/diffusion2d.py index 51a07f2d..f897ca5a 100644 --- a/diffusion2d.py +++ b/diffusion2d.py @@ -7,7 +7,6 @@ import numpy as np import matplotlib.pyplot as plt - class SolveDiffusion2D: def __init__(self): """ @@ -38,14 +37,30 @@ def __init__(self): self.dt = None def initialize_domain(self, w=10., h=10., dx=0.1, dy=0.1): + assert dx != 0, "dx cannot be zero" + assert dy != 0, "dy cannot be zero" + + 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 self.dy = dy + 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 d > 0, "Thermal diffusivity must be positive" + assert T_cold < T_hot, "T_cold must be less than T_hot" + + 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 @@ -67,7 +82,7 @@ def set_initial_condition(self): p2 = (i * self.dx - cx) ** 2 + (j * self.dy - cy) ** 2 if p2 < r2: u[i, j] = self.T_hot - + return u.copy() def do_timestep(self, u_nm1): @@ -102,6 +117,7 @@ def output_figure(fig, im): def main(): + DiffusionSolver = SolveDiffusion2D() DiffusionSolver.initialize_domain() diff --git a/log/failed_intergration_initialize_physical_parameters.log b/log/failed_intergration_initialize_physical_parameters.log new file mode 100644 index 00000000..a5aa44a8 --- /dev/null +++ b/log/failed_intergration_initialize_physical_parameters.log @@ -0,0 +1,96 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest +===================================================== test session starts ===================================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py F. [ 25%] +tests/unit/test_diffusion2d_functions.py .F..F. [100%] + +========================================================== FAILURES =========================================================== +_____________________________________________ test_initialize_physical_parameters _____________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.test_initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _w = 10. + _h = 20. + _dx = 30. + _dy = 40. + + solver.initialize_domain(_w, _h, _dx, _dy) + + _d = 20. + _T_Cold = 400. + _T_Hot = 600. + + solver.initialize_physical_parameters(_d, _T_Cold, _T_Hot) + + _expeted_dt = 14.4 + +> assert solver.dt == _expeted_dt +E assert 7.2 == 14.4 +E + where 7.2 = .dt + +tests/integration/test_diffusion2d.py:29: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 7.2 +_____________________________________________ test_initialize_physical_parameters _____________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 0.00025000000000000006 == 0.0005000000000000001 +E + where 0.00025000000000000006 = .dt + +tests/unit/test_diffusion2d_functions.py:42: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 0.00025000000000000006 +_____________________________________ TestDiffusion2D.test_initialize_physical_parameters _____________________________________ + +self = + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') +E AssertionError: 0.00025000000000000006 != 0.0005 within 1e-07 delta (0.00024999999999999995 difference) : dt not correct + +tests/unit/test_diffusion2d_functions.py:94: AssertionError +---------------------------------------------------- Captured stdout call ----------------------------------------------------- +dt = 0.00025000000000000006 +=================================================== short test summary info =================================================== +FAILED tests/integration/test_diffusion2d.py::test_initialize_physical_parameters - assert 7.2 == 14.4 +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 0.00025000000000000006 == 0.0005000000000000001 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_physical_parameters - AssertionError: 0.00025000000000000006 != 0.0005 within 1e-07 delta (0.00024999999999999995 difference) : dt not correct +================================================= 3 failed, 5 passed in 0.27s ================================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_intergration_test_set_initial_condition.log b/log/failed_intergration_test_set_initial_condition.log new file mode 100644 index 00000000..f6580f13 --- /dev/null +++ b/log/failed_intergration_test_set_initial_condition.log @@ -0,0 +1,107 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest +===================================================== test session starts ===================================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .F [ 25%] +tests/unit/test_diffusion2d_functions.py ..F..F [100%] + +========================================================== FAILURES =========================================================== +_________________________________________________ test_set_initial_condition __________________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + _w = 20. + _h = 30. + _dx = 5. + _dy = 5. + + _T_Cold = 400. + _T_Hot = 800. + + solver.initialize_domain(_w, _h, _dx, _dy) + + solver.T_cold = _T_Cold + solver.T_hot = _T_Hot + + _output = solver.set_initial_condition() + + _expected = _T_Cold * np.ones((solver.nx, solver.ny)) + + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + + 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: + _expected[i, j] = _T_Hot + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, False, True, True, True, True],\n [False, True, False, True, True, True],\n [ True, False, True, True, True, True],\n [ True, True, True, True, True, True]]).all +E + where array([[ True, False, True, True, True, True],\n [False, True, False, True, True, True],\n [ True, False, True, True, True, True],\n [ True, True, True, True, True, True]]) = (array([[400., 800., 400., 400., 400., 400.],\n [800., 800., 800., 400., 400., 400.],\n [400., 800., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.]]), array([[400., 400., 400., 400., 400., 400.],\n [400., 800., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.],\n [400., 400., 400., 400., 400., 400.]])) +E + where = np.equal + +tests/integration/test_diffusion2d.py:64: AssertionError +_________________________________________________ test_set_initial_condition __________________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:60: AssertionError +_________________________________________ TestDiffusion2D.test_set_initial_condition __________________________________________ + +self = + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') +E AssertionError: False != True : Initial condition not working + +tests/unit/test_diffusion2d_functions.py:111: AssertionError +=================================================== short test summary info =================================================== +FAILED tests/integration/test_diffusion2d.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_set_initial_condition - AssertionError: False != True : Initial condition not working +================================================= 3 failed, 5 passed in 0.33s ================================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_test_initialize_domain.log b/log/failed_test_initialize_domain.log new file mode 100644 index 00000000..c9262ec2 --- /dev/null +++ b/log/failed_test_initialize_domain.log @@ -0,0 +1,36 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +========================================== test session starts ========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py Fdt = 0.0005000000000000001 +.. + +=============================================== FAILURES ================================================ +________________________________________ test_initialize_domain _________________________________________ + + def test_initialize_domain(): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + +> assert solver.nx == 50 +E assert 100 == 50 +E + where 100 = .nx + +tests/unit/test_diffusion2d_functions.py:22: AssertionError +======================================== short test summary info ======================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_domain - assert 100 == 50 +====================================== 1 failed, 4 passed in 0.32s ====================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_test_initialize_physical_parameters.log b/log/failed_test_initialize_physical_parameters.log new file mode 100644 index 00000000..6dd67a46 --- /dev/null +++ b/log/failed_test_initialize_physical_parameters.log @@ -0,0 +1,38 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +========================================== test session starts ========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.00020000000000000004 +F. + +=============================================== FAILURES ================================================ +__________________________________ test_initialize_physical_parameters __________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 0.00020000000000000004 == 0.0005000000000000001 +E + where 0.00020000000000000004 = .dt + +tests/unit/test_diffusion2d_functions.py:41: AssertionError +======================================== short test summary info ======================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 0.00020000000000000004 == 0.0005000000000000001 +====================================== 1 failed, 4 passed in 0.27s ====================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_test_set_initial_condition.log b/log/failed_test_set_initial_condition.log new file mode 100644 index 00000000..f76a44c2 --- /dev/null +++ b/log/failed_test_set_initial_condition.log @@ -0,0 +1,41 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +===================================== test session starts ====================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 5 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.0005000000000000001 +.F + +=========================================== FAILURES =========================================== +__________________________________ test_set_initial_condition __________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:59: AssertionError +=================================== short test summary info ==================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +================================= 1 failed, 4 passed in 0.28s ================================== +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_initialize_domain.log b/log/failed_unittest_initialize_domain.log new file mode 100644 index 00000000..9dd772ce --- /dev/null +++ b/log/failed_unittest_initialize_domain.log @@ -0,0 +1,61 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +=========================================== test session starts =========================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py Fdt = 0.0005000000000000001 +..Fdt = 0.0005000000000000001 +.. + +================================================ FAILURES ================================================= +_________________________________________ test_initialize_domain __________________________________________ + + def test_initialize_domain(): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + assert solver.nx == 50 +> assert solver.ny == 71 +E assert 100 == 71 +E + where 100 = .ny + +tests/unit/test_diffusion2d_functions.py:24: AssertionError +_________________________________ TestDiffusion2D.test_initialize_domain __________________________________ + +self = + + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + self.assertEqual(solver.nx, 50, "nx is not correct") +> self.assertEqual(solver.ny, 71, "ny is not correct") +E AssertionError: 100 != 71 : ny is not correct + +tests/unit/test_diffusion2d_functions.py:77: AssertionError +========================================= short test summary info ========================================= +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_domain - assert 100 == 71 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_domain - AssertionError: 100 != 71 : ny is not correct +======================================= 2 failed, 6 passed in 0.26s ======================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_initialize_physical_parameters.log b/log/failed_unittest_initialize_physical_parameters.log new file mode 100644 index 00000000..d97dde1a --- /dev/null +++ b/log/failed_unittest_initialize_physical_parameters.log @@ -0,0 +1,63 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +==================================== test session starts ===================================== +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 2.0000000000000012e-05 +F..dt = 2.0000000000000012e-05 +F. + +========================================== FAILURES ========================================== +____________________________ test_initialize_physical_parameters _____________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> assert solver.dt == 0.0005000000000000001 +E assert 2.0000000000000012e-05 == 0.0005000000000000001 +E + where 2.0000000000000012e-05 = .dt + +tests/unit/test_diffusion2d_functions.py:42: AssertionError +____________________ TestDiffusion2D.test_initialize_physical_parameters _____________________ + +self = + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + +> self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') +E AssertionError: 2.0000000000000012e-05 != 0.0005 within 1e-07 delta (0.00048 difference) : dt not correct + +tests/unit/test_diffusion2d_functions.py:94: AssertionError +================================== short test summary info =================================== +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - assert 2.0000000000000012e-05 == 0.0005000000000000001 +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_initialize_physical_parameters - AssertionError: 2.0000000000000012e-05 != 0.0005 within 1e-07 delta (0.00048 difference) ... +================================ 2 failed, 6 passed in 0.26s ================================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/log/failed_unittest_set_initial_condition.log b/log/failed_unittest_set_initial_condition.log new file mode 100644 index 00000000..4b25cb8a --- /dev/null +++ b/log/failed_unittest_set_initial_condition.log @@ -0,0 +1,66 @@ +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % pytest -s +============================ test session starts ============================= +platform darwin -- Python 3.12.4, pytest-7.4.4, pluggy-1.0.0 +rootdir: /Users/mahdi/Documents/SSE Exercises/testing-python-exercise-wt2425 +plugins: anyio-4.2.0 +collected 8 items + +tests/integration/test_diffusion2d.py .. +tests/unit/test_diffusion2d_functions.py .dt = 0.0005000000000000001 +.F.dt = 0.0005000000000000001 +.F + +================================== FAILURES ================================== +_________________________ test_set_initial_condition _________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> assert np.equal(_output, _expected).all() +E AssertionError: assert False +E + where False = () +E + where = array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]).all +E + where array([[ True, True, True, True, True],\n [ True, True, True, True, False],\n [ True, True, True, False, False],\n [ True, True, False, False, False],\n [ True, False, False, False, False]]) = (array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., nan],\n [20., 20., 20., nan, nan],\n [20., 20., nan, nan, nan],\n [20., nan, nan, nan, nan]]), array([[20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.],\n [20., 20., 20., 20., 20.]])) +E + where = np.equal + +tests/unit/test_diffusion2d_functions.py:60: AssertionError +_________________ TestDiffusion2D.test_set_initial_condition _________________ + +self = + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + +> self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') +E AssertionError: False != True : Initial condition not working + +tests/unit/test_diffusion2d_functions.py:111: AssertionError +========================== short test summary info =========================== +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: assert False +FAILED tests/unit/test_diffusion2d_functions.py::TestDiffusion2D::test_set_initial_condition - AssertionError: False != True : Initial condition not working +======================== 2 failed, 6 passed in 0.32s ========================= +(.venv) (base) mahdi@s-8d3a265e testing-python-exercise-wt2425 % \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integration/test_diffusion2d.py b/tests/integration/test_diffusion2d.py index fd026b40..28e9dd08 100644 --- a/tests/integration/test_diffusion2d.py +++ b/tests/integration/test_diffusion2d.py @@ -3,17 +3,62 @@ """ from diffusion2d import SolveDiffusion2D - +import numpy as np def test_initialize_physical_parameters(): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.test_initialize_physical_parameters """ solver = SolveDiffusion2D() + + _w = 10. + _h = 20. + _dx = 30. + _dy = 40. + + solver.initialize_domain(_w, _h, _dx, _dy) + + _d = 20. + _T_Cold = 400. + _T_Hot = 600. + + solver.initialize_physical_parameters(_d, _T_Cold, _T_Hot) + + _expeted_dt = 14.4 + + assert solver.dt == _expeted_dt def test_set_initial_condition(): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() + + _w = 20. + _h = 30. + _dx = 5. + _dy = 5. + + _T_Cold = 400. + _T_Hot = 800. + + solver.initialize_domain(_w, _h, _dx, _dy) + + solver.T_cold = _T_Cold + solver.T_hot = _T_Hot + + _output = solver.set_initial_condition() + + _expected = _T_Cold * np.ones((solver.nx, solver.ny)) + + r, cx, cy = 2, 5, 5 + r2 = r ** 2 + + 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: + _expected[i, j] = _T_Hot + + assert np.equal(_output, _expected).all() diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/test_diffusion2d_functions.py b/tests/unit/test_diffusion2d_functions.py index c4277ffd..80c3ada7 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -2,25 +2,113 @@ Tests for functions in class SolveDiffusion2D """ +import numpy as np +import unittest +from unittest import TestCase from diffusion2d import SolveDiffusion2D - def test_initialize_domain(): """ Check function SolveDiffusion2D.initialize_domain """ solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + assert solver.nx == 50 + assert solver.ny == 71 def test_initialize_physical_parameters(): """ - Checks function SolveDiffusion2D.initialize_domain + Checks function SolveDiffusion2D.initialize_physical_parameters """ solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + + assert solver.dt == 0.0005000000000000001 def test_set_initial_condition(): """ - Checks function SolveDiffusion2D.get_initial_function + Checks function SolveDiffusion2D.set_initial_condition """ solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + + assert np.equal(_output, _expected).all() + +class TestDiffusion2D(TestCase): + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + _w = 25. + _h = 50. + _dx = 0.5 + _dy = 0.7 + + solver.initialize_domain(w=_w, h=_h, dx=_dx, dy=_dy) + + self.assertEqual(solver.nx, 50, "nx is not correct") + self.assertEqual(solver.ny, 71, "ny is not correct") + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_physical_parameters + """ + solver = SolveDiffusion2D() + + _d = 5. + _T_cold = 500. + _T_hot = 600. + + solver.dx = 0.1 + solver.dy = 0.1 + + solver.initialize_physical_parameters(d=_d, T_cold=_T_cold, T_hot=_T_hot) + + self.assertAlmostEqual(solver.dt,0.0005,delta=0.0000001,msg='dt not correct') + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.set_initial_condition + """ + solver = SolveDiffusion2D() + + solver.T_cold = 20. + solver.nx = 5 + solver.ny = 5 + solver.dx = 0.5 + solver.dy = 0.5 + + _output = solver.set_initial_condition() + _expected = solver.T_cold * np.ones((solver.nx, solver.ny)) + + self.assertEqual(np.equal(_output, _expected).all(),True,msg='Initial condition not working') + +if __name__ == '__main__': + unittest.main() \ No newline at end of file diff --git a/tox.toml b/tox.toml new file mode 100644 index 00000000..d0009197 --- /dev/null +++ b/tox.toml @@ -0,0 +1,12 @@ +requires = ["tox>=4"] +env_list = ["unitTest", "integrationTest"] + +[env.unitTest] +description = "Unit Tests" +deps = ["pytest>=8", "matplotlib", "numpy"] +commands = [["pytest", "tests/unit/test_diffusion2d_functions.py"]] + +[env.integrationTest] +description = "Integration Tests" +deps = ["pytest>=8", "matplotlib", "numpy"] +commands = [["pytest", "tests/integration/test_diffusion2d.py"]] \ No newline at end of file