|
7 | 7 | euler313_to_quaternions, |
8 | 8 | find_roots_cubic_function, |
9 | 9 | haversine, |
| 10 | + inverted_haversine, |
10 | 11 | tuple_handler, |
11 | 12 | ) |
12 | 13 |
|
@@ -137,3 +138,50 @@ def test_invalid_pressure_conversion_factor(pressure_conversion_factor): |
137 | 138 | dictionary="ECMWF", |
138 | 139 | pressure_conversion_factor=pressure_conversion_factor, |
139 | 140 | ) |
| 141 | + |
| 142 | + |
| 143 | +def test_inverted_haversine_scalar(): |
| 144 | + """Test inverted_haversine with scalar arguments matches haversine distance.""" |
| 145 | + # Arrange |
| 146 | + lat0, lon0 = -23.508958, -46.720080 |
| 147 | + lat1, lon1 = -23.522939, -46.558253 |
| 148 | + earth_radius = 6378100.0 |
| 149 | + distance = haversine(lat0, lon0, lat1, lon1, earth_radius) |
| 150 | + bearing = 90.0 |
| 151 | + |
| 152 | + # Act |
| 153 | + lat_result, lon_result = inverted_haversine( |
| 154 | + lat0, lon0, distance, bearing, earth_radius |
| 155 | + ) |
| 156 | + |
| 157 | + # Assert |
| 158 | + recalculated_distance = haversine(lat0, lon0, lat_result, lon_result, earth_radius) |
| 159 | + assert recalculated_distance == pytest.approx(distance, abs=1e-2) |
| 160 | + |
| 161 | + |
| 162 | +def test_inverted_haversine_array(): |
| 163 | + """Test inverted_haversine with NumPy arrays returns correct array results.""" |
| 164 | + # Arrange |
| 165 | + lat0, lon0 = -23.508958, -46.720080 |
| 166 | + distances = np.array([0.0, 5000.0, 16591.438]) |
| 167 | + bearings = np.array([0.0, 45.0, 90.0]) |
| 168 | + earth_radius = 6378100.0 |
| 169 | + |
| 170 | + # Act |
| 171 | + lat_results, lon_results = inverted_haversine( |
| 172 | + lat0, lon0, distances, bearings, earth_radius |
| 173 | + ) |
| 174 | + |
| 175 | + # Assert |
| 176 | + assert isinstance(lat_results, np.ndarray) |
| 177 | + assert isinstance(lon_results, np.ndarray) |
| 178 | + assert len(lat_results) == 3 |
| 179 | + assert len(lon_results) == 3 |
| 180 | + |
| 181 | + # Check scalar consistency for each element |
| 182 | + for i, distance in enumerate(distances): |
| 183 | + lat_scalar, lon_scalar = inverted_haversine( |
| 184 | + lat0, lon0, distance, bearings[i], earth_radius |
| 185 | + ) |
| 186 | + assert lat_results[i] == pytest.approx(lat_scalar) |
| 187 | + assert lon_results[i] == pytest.approx(lon_scalar) |
0 commit comments