From ae5d0bcfe045e0f23427f981a5c26f0414a2f6ab Mon Sep 17 00:00:00 2001 From: Saranya Vanga Date: Tue, 21 Jan 2025 19:02:11 +0100 Subject: [PATCH] Adding Unit tests and Integration tests --- README.md | 358 +++++++++++++++++++++++ coverage-report.pdf | Bin 0 -> 130824 bytes diffusion2d.py | 9 +- requirements.txt | 2 + setup.py | 7 + tests/__init__.py | 0 tests/integration/__init__.py | 0 tests/integration/test_diffusion2d.py | 44 +++ tests/unit/__init__.py | 0 tests/unit/test_diffusion2d_functions.py | 91 +++++- tox.toml | 12 + 11 files changed, 506 insertions(+), 17 deletions(-) create mode 100644 coverage-report.pdf create mode 100644 requirements.txt create mode 100644 setup.py create mode 100644 tests/__init__.py create mode 100644 tests/integration/__init__.py create mode 100644 tests/unit/__init__.py create mode 100644 tox.toml diff --git a/README.md b/README.md index da66993c..1ca2abad 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,366 @@ Please follow the instructions in [python_testing_exercise.md](https://github.co ## Test logs (for submission) ### pytest log +#### Changing self.nx = int(w / dx) to self.nx = int(h / dx) + + pytest tests/unit/test_diffusion2d_functions.py +>> +================================================== test session starts ================================================== +platform win32 -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 +rootdir: C:\Projects\testing-python-exercise-wt2425 +collected 3 items + +tests\unit\test_diffusion2d_functions.py F.. [100%] + +======================================================= FAILURES ======================================================== +________________________________________________ test_initialize_domain _________________________________________________ + + def test_initialize_domain(): + """ + Check function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + # Arrange + w, h, dx, dy = 10.0, 20.0, 0.5, 0.5 + expected_nx, expected_ny = int(w / dx), int(h / dy) + + # Act + solver.initialize_domain(w, h, dx, dy) + + # Assert +> assert solver.nx == expected_nx +E assert 40 == 20 +E + where 40 = .nx + +tests\unit\test_diffusion2d_functions.py:21: AssertionError +================================================ short test summary info ================================================ +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_domain - assert 40 == 20 +============================================== 1 failed, 2 passed in 0.71s ============================================== + + +#### Changing self.dt = dx2 * dy2 / (2 * self.D * (dx2 + dy2)) to self.dt = dx2 * dy2 / (self.D * (dx2 + dy2)) + + +platform win32 -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 +rootdir: C:\Projects\testing-python-exercise-wt2425 +collected 3 items + +tests\unit\test_diffusion2d_functions.py .F. [100%] + +======================================================= FAILURES ======================================================== +__________________________________________ test_initialize_physical_parameters __________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + d = 4.0 # Diffusivity, analogous to alpha + dx = 0.1 # Grid spacing in the x-direction + dy = 0.1 # Grid spacing in the y-direction + + # Calculate expected dt manually using the formula + dx2, dy2 = dx * dx, dy * dy + dt_expected = dx2 * dy2 / (2 * d * (dx2 + dy2)) + + # Set the dx and dy values manually in the solver (since we're testing only initialize_physical_parameters) + solver.dx = dx + solver.dy = dy + + # Call the function to test + solver.initialize_physical_parameters(d) + + # Assert that the actual dt matches the expected value +> assert solver.dt == pytest.approx(dt_expected, rel=1e-9), f"Expected dt = {dt_expected}, but got {solver.dt}" +E AssertionError: Expected dt = 0.0006250000000000001, but got 0.0012500000000000002 +E assert 0.0012500000000000002 == 0.00062500000...0001 ± 1.0e-12 +E +E comparison failed +E Obtained: 0.0012500000000000002 +E Expected: 0.0006250000000000001 ± 1.0e-12 + +tests\unit\test_diffusion2d_functions.py:47: AssertionError +------------------------------------------------- Captured stdout call -------------------------------------------------- +dt = 0.0012500000000000002 +================================================ short test summary info ================================================ +FAILED tests/unit/test_diffusion2d_functions.py::test_initialize_physical_parameters - AssertionError: Expected dt = 0.0006250000000000001, but got 0.0012500000000000002 +============================================== 1 failed, 2 passed in 0.81s ============================================== + + +#### Changing if p2 < r2 to if p2 <= r2 + +platform win32 -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 +rootdir: C:\Projects\testing-python-exercise-wt2425 +collected 3 items + +tests\unit\test_diffusion2d_functions.py ..F [100%] + +======================================================= FAILURES ======================================================== +______________________________________________ test_set_initial_condition _______________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + T_hot = 100.0 # Hot temperature + T_cold = 0.0 # Cold temperature + dx = 1.0 # Spacing in the x-direction + dy = 1.0 # Spacing in the y-direction + nx = 10 # Number of points in x-direction + ny = 10 + + + solver.nx = nx + solver.ny = ny + solver.dx = dx + solver.dy = dy + solver.T_hot = T_hot + solver.T_cold = T_cold + + # Step 3: Call the function to set initial conditions + u = solver.set_initial_condition() + + # Step 4: Manually compute the expected u array + # Expected u array should have a circle of T_hot with radius r=2 at center (cx, cy) = (5, 5) + expected_u = T_cold * np.ones((ny, nx)) # Start with all values as T_cold + r = 2 + cx, cy = 5, 5 + r2 = r ** 2 # r^2 for comparison + for i in range(nx): + for j in range(ny): + p2 = (i * dx - cx) ** 2 + (j * dy - cy) ** 2 # Compute distance squared + if p2 < r2: + expected_u[j, i] = T_hot # Set the circle region to T_hot + + # Step 5: Assert that the generated u array matches the expected u array +> np.testing.assert_array_equal(u, expected_u, err_msg="Initial condition field is not correct.") + +tests\unit\test_diffusion2d_functions.py:86: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +args = (array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], + [ 0., 0., 0., 0., 0., 0., 0.... 0., 0., 0., 0., 0., 0., 0., 0.], + [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])) +kwargs = {'err_msg': 'Initial condition field is not correct.'}, old_name = 'y', new_name = 'desired' + + @functools.wraps(fun) + def wrapper(*args, **kwargs): + for old_name, new_name in zip(old_names, new_names): + if old_name in kwargs: + if dep_version: + end_version = dep_version.split('.') + end_version[1] = str(int(end_version[1]) + 2) + end_version = '.'.join(end_version) + msg = (f"Use of keyword argument `{old_name}` is " + f"deprecated and replaced by `{new_name}`. " + f"Support for `{old_name}` will be removed " + f"in NumPy {end_version}.") + warnings.warn(msg, DeprecationWarning, stacklevel=2) + if new_name in kwargs: + msg = (f"{fun.__name__}() got multiple values for " + f"argument now known as `{new_name}`") + raise TypeError(msg) + kwargs[new_name] = kwargs.pop(old_name) +> return fun(*args, **kwargs) +E AssertionError: +E Arrays are not equal +E Initial condition field is not correct. +E Mismatched elements: 4 / 100 (4%) +E Max absolute difference among violations: 100. +E Max relative difference among violations: inf +E ACTUAL: array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], +E [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], +E [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],... +E DESIRED: array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], +E [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], +E [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],... + +venv\Lib\site-packages\numpy\_utils\__init__.py:85: AssertionError +================================================ short test summary info ================================================ +FAILED tests/unit/test_diffusion2d_functions.py::test_set_initial_condition - AssertionError: +============================================== 1 failed, 2 passed in 0.74s ============================================== ### unittest log +#### Changing self.nx = int(w / dx) to self.nx = int(h / dx) + + +FAIL: test_initialize_domain (tests.unit.test_diffusion2d_functions.TestDiffusion2D.test_initialize_domain) +Check function SolveDiffusion2D.initialize_domain +---------------------------------------------------------------------- +Traceback (most recent call last): + File "C:\Projects\testing-python-exercise-wt2425\tests\unit\test_diffusion2d_functions.py", line 23, in test_initialize_domain + self.assertEqual(self.solver.nx, expected_nx, f"Expected nx = {expected_nx}, but got {self.solver.nx}") +AssertionError: 40 != 20 : Expected nx = 20, but got 40 + +---------------------------------------------------------------------- +Ran 3 tests in 0.109s + +FAILED (failures=1) + + +#### Changing self.dt = dx2 * dy2 / (2 * self.D * (dx2 + dy2)) to self.dt = dx2 * dy2 / (self.D * (dx2 + dy2)) + +FAIL: test_initialize_physical_parameters (tests.unit.test_diffusion2d_functions.TestDiffusion2D.test_initialize_physical_parameters) +Checks function SolveDiffusion2D.initialize_domain +---------------------------------------------------------------------- +Traceback (most recent call last): + File "C:\Projects\testing-python-exercise-wt2425\tests\unit\test_diffusion2d_functions.py", line 47, in test_initialize_physical_parameters + self.assertAlmostEqual(self.solver.dt, dt_expected, delta=1e-9, msg=f"Expected dt = {dt_expected}, but got {self.solver.dt}") +AssertionError: 0.0012500000000000002 != 0.0006250000000000001 within 1e-09 delta (0.0006250000000000001 difference) : Expected dt = 0.0006250000000000001, but got 0.0012500000000000002 + +---------------------------------------------------------------------- +Ran 3 tests in 0.103s + +FAILED (failures=1) + + +#### Changing (i * self.dx - cx) in p2 to (i * self.dx) + +FAIL: test_set_initial_condition (tests.unit.test_diffusion2d_functions.TestDiffusion2D.test_set_initial_condition) +Checks function SolveDiffusion2D.get_initial_function +---------------------------------------------------------------------- +Traceback (most recent call last): + File "C:\Projects\testing-python-exercise-wt2425\tests\unit\test_diffusion2d_functions.py", line 84, in test_set_initial_condition + np.testing.assert_array_equal(u, expected_u, err_msg="Initial condition field is not correct.") + File "C:\Projects\testing-python-exercise-wt2425\venv\Lib\site-packages\numpy\_utils\__init__.py", line 85, in wrapper + return fun(*args, **kwargs) + ^^^^^^^^^^^^^^^^^^^^ + File "C:\Projects\testing-python-exercise-wt2425\venv\Lib\site-packages\numpy\testing\_private\utils.py", line 1021, in assert_array_equal + assert_array_compare(operator.__eq__, actual, desired, err_msg=err_msg, + File "C:\Projects\testing-python-exercise-wt2425\venv\Lib\site-packages\numpy\testing\_private\utils.py", line 885, in assert_array_compare + raise AssertionError(msg) +AssertionError: +Arrays are not equal +Initial condition field is not correct. +Mismatched elements: 15 / 100 (15%) +Max absolute difference among violations: 400. +Max relative difference among violations: 1.33333333 + ACTUAL: array([[300., 300., 300., 300., 300., 300., 300., 300., 300., 300.], + [300., 300., 300., 300., 300., 300., 300., 300., 300., 300.], + [300., 300., 300., 300., 300., 300., 300., 300., 300., 300.],... + DESIRED: array([[300., 300., 300., 300., 700., 700., 700., 300., 300., 300.], + [300., 300., 300., 300., 700., 700., 700., 300., 300., 300.], + [300., 300., 300., 300., 300., 300., 300., 300., 300., 300.],... + +---------------------------------------------------------------------- +Ran 3 tests in 0.078s + +FAILED (failures=1) + + +### Integrationtest log + +#### Changing self.dt = dx2 * dy2 / (2 * self.D * (dx2 + dy2)) to self.dt = dx2 * dy2 / (self.D * (dx2 + dy2)) + +tests\integration\test_diffusion2d.py F. [100%] + +======================================================= FAILURES ======================================================== +__________________________________________ test_initialize_physical_parameters __________________________________________ + + def test_initialize_physical_parameters(): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + solver = SolveDiffusion2D() + + # Initialize domain + solver.initialize_domain(w=10.0, h=10.0, dx=0.5, dy=0.5) + + # Initialize physical parameters + solver.initialize_physical_parameters(d=2.0, T_cold=300.0, T_hot=700.0) + + # Expected dt calculation + dx2, dy2 = solver.dx ** 2, solver.dy ** 2 + expected_dt = dx2 * dy2 / (solver.D * (dx2 + dy2)) + +> assert solver.dt == expected_dt, f"Expected {expected_dt}, got {solver.dt}" +E AssertionError: Expected 0.0625, got 0.03125 +E assert 0.03125 == 0.0625 +E + where 0.03125 = .dt + +tests\integration\test_diffusion2d.py:25: AssertionError + + +#### Changing (i * self.dx - cx) in p2 to (i * self.dx) + +tests\integration\test_diffusion2d.py . F [100%] + +======================================================= FAILURES ======================================================== +______________________________________________ test_set_initial_condition _______________________________________________ + + def test_set_initial_condition(): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + solver = SolveDiffusion2D() + + # Step 1: Initialize domain with valid dimensions and grid spacing + solver.initialize_domain(w=10.0, h=10.0, dx=0.5, dy=0.5) + + # Initialize physical parameters + solver.initialize_physical_parameters(d=4.0, T_cold=300.0, T_hot=700.0) + + # Set initial conditions + u = solver.set_initial_condition() + + # Step 3: Expected u calculation + nx, ny = solver.nx, solver.ny + T_cold, T_hot = solver.T_cold, solver.T_hot + r, cx, cy = 2.0, 5.0, 5.0 + + expected_u = T_cold * np.ones((nx, ny)) + for i in range(nx): + for j in range(ny): + p2 = (i * solver.dx) ** 2 + (j * solver.dy - cy) ** 2 + if p2 < r ** 2: + expected_u[i, j] = T_hot + + # Step 4: Assert the result +> np.testing.assert_array_equal(u, expected_u, "Initial condition array mismatch") + +tests\integration\test_diffusion2d.py:56: +_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + +args = (array([[300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., + 300., 300., 300., 300., 300., 300.,... 300., 300., 300., + 300., 300., 300., 300., 300., 300., 300., 300., 300.]]), 'Initial condition array mismatch') +kwargs = {}, old_name = 'y', new_name = 'desired' + + @functools.wraps(fun) + def wrapper(*args, **kwargs): + for old_name, new_name in zip(old_names, new_names): + if old_name in kwargs: + if dep_version: + end_version = dep_version.split('.') + end_version[1] = str(int(end_version[1]) + 2) + end_version = '.'.join(end_version) + msg = (f"Use of keyword argument `{old_name}` is " + f"deprecated and replaced by `{new_name}`. " + f"Support for `{old_name}` will be removed " + f"in NumPy {end_version}.") + warnings.warn(msg, DeprecationWarning, stacklevel=2) + if new_name in kwargs: + msg = (f"{fun.__name__}() got multiple values for " + f"argument now known as `{new_name}`") + raise TypeError(msg) + kwargs[new_name] = kwargs.pop(old_name) +> return fun(*args, **kwargs) +E AssertionError: +E Arrays are not equal +E Initial condition array mismatch +E Mismatched elements: 71 / 400 (17.8%) +E Max absolute difference among violations: 400. +E Max relative difference among violations: 1.33333333 +E ACTUAL: array([[300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300., +E 300., 300., 300., 300., 300., 300., 300., 300., 300.], +E [300., 300., 300., 300., 300., 300., 300., 300., 300., 300., 300.,... +E DESIRED: array([[300., 300., 300., 300., 300., 300., 300., 700., 700., 700., 700., +E 700., 700., 700., 300., 300., 300., 300., 300., 300.], +E [300., 300., 300., 300., 300., 300., 300., 700., 700., 700., 700.,... + +venv\Lib\site-packages\numpy\_utils\__init__.py:85: AssertionError + ## Citing diff --git a/coverage-report.pdf b/coverage-report.pdf new file mode 100644 index 0000000000000000000000000000000000000000..42e255e60a78c029bc2e62045dddf445708bcb4e GIT binary patch literal 130824 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.26.1 +matplotlib>=3.8.4 \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..40b4dcc1 --- /dev/null +++ b/setup.py @@ -0,0 +1,7 @@ +from setuptools import setup + +setup( + name="diffusion2d", + version="1.0", + py_modules=["diffusion2d"], +) \ 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..d15c215a 100644 --- a/tests/integration/test_diffusion2d.py +++ b/tests/integration/test_diffusion2d.py @@ -2,6 +2,7 @@ Tests for functionality checks in class SolveDiffusion2D """ +import numpy as np from diffusion2d import SolveDiffusion2D @@ -11,9 +12,52 @@ def test_initialize_physical_parameters(): """ solver = SolveDiffusion2D() + # Initialize domain + solver.initialize_domain(w=10.0, h=10.0, dx=0.5, dy=0.5) + + # Initialize physical parameters + solver.initialize_physical_parameters(d=2.0, T_cold=300.0, T_hot=700.0) + + assert solver.D == 2.0, f"Expected D to be 2.0, but got {solver.D}" + + # Expected dt calculation + dx2, dy2 = solver.dx ** 2, solver.dy ** 2 + expected_dt = dx2 * dy2 / (2 * solver.D * (dx2 + dy2)) + + assert solver.dt == expected_dt, f"Expected {expected_dt}, got {solver.dt}" + def test_set_initial_condition(): """ Checks function SolveDiffusion2D.get_initial_function """ solver = SolveDiffusion2D() + + # Step 1: Initialize domain with valid dimensions and grid spacing + solver.initialize_domain(w=10.0, h=10.0, dx=0.5, dy=0.5) + + # Initialize physical parameters + solver.initialize_physical_parameters(d=4.0, T_cold=300.0, T_hot=700.0) + + # Set initial conditions + u = solver.set_initial_condition() + + # Step 3: Expected u calculation + nx, ny = solver.nx, solver.ny + T_cold, T_hot = solver.T_cold, solver.T_hot + r, cx, cy = 2.0, 5.0, 5.0 + + expected_u = T_cold * np.ones((nx, ny)) + + + for i in range(nx): + for j in range(ny): + p2 = (i * solver.dx - cx) ** 2 + (j * solver.dy - cy) ** 2 + if p2 < r ** 2: + expected_u[i, j] = T_hot + + # Step 4: Assert the result + np.testing.assert_array_equal(u, expected_u, err_msg="Initial condition array mismatch") + + # Optional debug prints (can be removed in production) + print("Test passed: set_initial_condition produces expected results.") \ No newline at end of file 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..5708ff8b 100644 --- a/tests/unit/test_diffusion2d_functions.py +++ b/tests/unit/test_diffusion2d_functions.py @@ -1,26 +1,85 @@ """ Tests for functions in class SolveDiffusion2D """ - +import unittest +import numpy as np from diffusion2d import SolveDiffusion2D +class TestDiffusion2D(unittest.TestCase): + + def setUp(self): + self.solver = SolveDiffusion2D() + + def test_initialize_domain(self): + """ + Check function SolveDiffusion2D.initialize_domain + """ + w, h, dx, dy = 10.0, 20.0, 0.5, 0.5 + expected_nx, expected_ny = int(w / dx), int(h / dy) + + # Act + self.solver.initialize_domain(w, h, dx, dy) + + self.assertEqual(self.solver.nx, expected_nx, f"Expected nx = {expected_nx}, but got {self.solver.nx}") + self.assertEqual(self.solver.ny, expected_ny, f"Expected ny = {expected_ny}, but got {self.solver.ny}") + + + def test_initialize_physical_parameters(self): + """ + Checks function SolveDiffusion2D.initialize_domain + """ + d = 4.0 # Diffusivity, analogous to alpha + dx = 0.1 # Grid spacing in the x-direction + dy = 0.1 # Grid spacing in the y-direction + + # Calculate expected dt manually using the formula + dx2, dy2 = dx * dx, dy * dy + dt_expected = dx2 * dy2 / (2 * d * (dx2 + dy2)) + + # Set the dx and dy values manually in the solver (since we're testing only initialize_physical_parameters) + self.solver.dx = dx + self.solver.dy = dy + + # Act + self.solver.initialize_physical_parameters(d) + + # Assert + self.assertAlmostEqual(self.solver.dt, dt_expected, delta=1e-9, msg=f"Expected dt = {dt_expected}, but got {self.solver.dt}") + + def test_set_initial_condition(self): + """ + Checks function SolveDiffusion2D.get_initial_function + """ + T_hot = 700.0 # Hot temperature + T_cold = 300.0 # Cold temperature + dx = 1.0 # Spacing in the x-direction + dy = 1.0 # Spacing in the y-direction + nx = 10 # Number of points in x-direction + ny = 10 # Number of points in y-direction + + self.solver.nx = nx + self.solver.ny = ny + self.solver.dx = dx + self.solver.dy = dy + self.solver.T_hot = T_hot + self.solver.T_cold = T_cold -def test_initialize_domain(): - """ - Check function SolveDiffusion2D.initialize_domain - """ - solver = SolveDiffusion2D() + # Step 4: Manually compute the expected u array + expected_u = T_cold * np.ones((nx, ny)) # Start with all values as T_cold + r = 2 # Radius of the circle + cx, cy = 5, 5 # Center of the circle + + for i in range(nx): + for j in range(ny): + p2 = (i * self.solver.dx - cx) ** 2 + (j * self.solver.dy - cy) ** 2 + if p2 < r ** 2: + expected_u[i, j] = T_hot + -def test_initialize_physical_parameters(): - """ - Checks function SolveDiffusion2D.initialize_domain - """ - solver = SolveDiffusion2D() + # Act + u = self.solver.set_initial_condition() + # Step 5: Assert that the generated u array matches the expected u array + np.testing.assert_array_equal(u, expected_u, err_msg="Initial condition field is not correct.") -def test_set_initial_condition(): - """ - Checks function SolveDiffusion2D.get_initial_function - """ - solver = SolveDiffusion2D() diff --git a/tox.toml b/tox.toml new file mode 100644 index 00000000..9b033fa0 --- /dev/null +++ b/tox.toml @@ -0,0 +1,12 @@ +requires = ["tox>=4"] +env_list = ["pytest", "unittest"] + +[env.pytest] +description = "pytest" +deps = ["pytest", "-r requirements.txt"] +commands = [["python", "-m", "pytest", "tests/integration/test_diffusion2d.py"]] + +[env.unittest] +description = "unittest" +deps = ["-r requirements.txt"] +commands = [["python", "-m", "unittest", "tests/unit/test_diffusion2d_functions.py"]] \ No newline at end of file