Skip to content

[jafarkmi] Adding tests #3

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

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
Binary file added .coverage
Binary file not shown.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
tests/unit/__pycache__/
tests/integration/__pycache__/
tests/__pycache__/
__pycache__/
.DS_Store
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Binary file added coverage-report.pdf
Binary file not shown.
22 changes: 19 additions & 3 deletions diffusion2d.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import numpy as np
import matplotlib.pyplot as plt


class SolveDiffusion2D:
def __init__(self):
"""
Expand Down Expand Up @@ -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
Expand All @@ -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):
Expand Down Expand Up @@ -102,6 +117,7 @@ def output_figure(fig, im):


def main():

DiffusionSolver = SolveDiffusion2D()

DiffusionSolver.initialize_domain()
Expand Down
96 changes: 96 additions & 0 deletions log/failed_intergration_initialize_physical_parameters.log
Original file line number Diff line number Diff line change
@@ -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 = <diffusion2d.SolveDiffusion2D object at 0x116319fd0>.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 = <diffusion2d.SolveDiffusion2D object at 0x11631ac00>.dt

tests/unit/test_diffusion2d_functions.py:42: AssertionError
---------------------------------------------------- Captured stdout call -----------------------------------------------------
dt = 0.00025000000000000006
_____________________________________ TestDiffusion2D.test_initialize_physical_parameters _____________________________________

self = <tests.unit.test_diffusion2d_functions.TestDiffusion2D testMethod=test_initialize_physical_parameters>

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 %
107 changes: 107 additions & 0 deletions log/failed_intergration_test_set_initial_condition.log
Original file line number Diff line number Diff line change
@@ -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 = <built-in method all of numpy.ndarray object at 0x113c145d0>()
E + where <built-in method all of numpy.ndarray object at 0x113c145d0> = 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]]) = <ufunc 'equal'>(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 <ufunc 'equal'> = 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 = <built-in method all of numpy.ndarray object at 0x113c17450>()
E + where <built-in method all of numpy.ndarray object at 0x113c17450> = 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]]) = <ufunc 'equal'>(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 <ufunc 'equal'> = np.equal

tests/unit/test_diffusion2d_functions.py:60: AssertionError
_________________________________________ TestDiffusion2D.test_set_initial_condition __________________________________________

self = <tests.unit.test_diffusion2d_functions.TestDiffusion2D testMethod=test_set_initial_condition>

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 %
36 changes: 36 additions & 0 deletions log/failed_test_initialize_domain.log
Original file line number Diff line number Diff line change
@@ -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 = <diffusion2d.SolveDiffusion2D object at 0x118514f20>.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 %
38 changes: 38 additions & 0 deletions log/failed_test_initialize_physical_parameters.log
Original file line number Diff line number Diff line change
@@ -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 = <diffusion2d.SolveDiffusion2D object at 0x1168212b0>.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 %
Loading