|
| 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