Skip to content

Commit 08c25f6

Browse files
author
Sosnowsky
committed
BUGFIX: start and stop logix, create unit tests
1 parent e77a7c8 commit 08c25f6

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

blobmodel/model.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -346,9 +346,9 @@ def _compute_start_stop(self, blob: Blob, speed_up: bool, error: float):
346346
stop = np.minimum(
347347
self._geometry.t.size,
348348
int(
349-
blob.t_init
350-
+ (
351-
-blob.width_prop * np.log(error * np.sqrt(np.pi))
349+
(
350+
blob.t_init
351+
- blob.width_prop * np.log(error * np.sqrt(np.pi))
352352
+ self._geometry.Lx
353353
- blob.pos_x
354354
)

tests/test_model.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import unittest
2+
import numpy as np
3+
from unittest.mock import Mock
4+
from blobmodel import Model
5+
6+
7+
class TestComputeStartStop(unittest.TestCase):
8+
def setUp(self):
9+
# Mock the geometry object
10+
self.geometry = Mock()
11+
self.geometry.t = np.linspace(0, 10, 101) # t from 0 to 10 with 101 points
12+
self.geometry.dt = 0.1 # Sampling time
13+
self.geometry.Lx = 100.0 # Domain size
14+
15+
# Mock the Blob object
16+
self.blob = Mock()
17+
self.blob.t_init = 2.0 # Default initial time
18+
self.blob.v_x = 10.0 # Default velocity
19+
self.blob.width_prop = 1.0 # Default width property
20+
self.blob.pos_x = 0.0 # Default initial position
21+
self.model = Model()
22+
self.model._geometry = self.geometry
23+
24+
self.error = 1e-5
25+
26+
def test_no_speed_up(self):
27+
start, stop = self.model._compute_start_stop(
28+
self.blob, speed_up=False, error=self.error
29+
)
30+
self.assertEqual(start, 0)
31+
self.assertEqual(stop, self.geometry.t.size)
32+
33+
def test_zero_velocity(self):
34+
self.blob.v_x = 0.0
35+
start, stop = self.model._compute_start_stop(
36+
self.blob, speed_up=True, error=self.error
37+
)
38+
self.assertEqual(start, 0)
39+
self.assertEqual(stop, self.geometry.t.size)
40+
41+
def test_positive_velocity(self):
42+
self.blob.v_x = 10.0
43+
start, stop = self.model._compute_start_stop(
44+
self.blob, speed_up=True, error=self.error
45+
)
46+
self.assertEqual(start, 9)
47+
self.assertEqual(stop, 101)
48+
49+
def test_negative_velocity(self):
50+
self.blob.v_x = -10.0
51+
start, stop = self.model._compute_start_stop(
52+
self.blob, speed_up=True, error=self.error
53+
)
54+
self.assertEqual(start, 9)
55+
self.assertEqual(stop, 101)
56+
57+
def test_boundary_start_clipped(self):
58+
self.blob.t_init = 0
59+
self.blob.v_x = 10.0
60+
start, stop = self.model._compute_start_stop(
61+
self.blob, speed_up=True, error=self.error
62+
)
63+
self.assertEqual(start, 0)
64+
self.assertEqual(stop, 101)
65+
66+
def test_small_error(self):
67+
self.blob.v_x = 10.0
68+
small_error = 1e-10
69+
start, stop = self.model._compute_start_stop(
70+
self.blob, speed_up=True, error=small_error
71+
)
72+
self.assertEqual(start, 0)
73+
self.assertEqual(stop, 101)
74+
75+
def test_large_velocity(self):
76+
self.blob.v_x = 1000.0
77+
start, stop = self.model._compute_start_stop(
78+
self.blob, speed_up=True, error=self.error
79+
)
80+
self.assertEqual(start, 19)
81+
self.assertEqual(stop, 1)

0 commit comments

Comments
 (0)