|
|
| import sys |
| import os |
| import numpy as np |
| import unittest.mock |
|
|
| |
| mock_st = unittest.mock.MagicMock() |
| def pass_through_decorator(*args, **kwargs): |
| def decorator(f): |
| return f |
| return decorator |
| mock_st.cache_data = pass_through_decorator |
| sys.modules["streamlit"] = mock_st |
|
|
| |
| sys.path.insert(0, os.getcwd()) |
|
|
| from app.main import simulate_braided_stream, simulate_river_terrace |
|
|
| def test_river_physics_advanced(): |
| print("Testing Advanced River Physics (Braided & Terrace)...") |
| |
| |
| print("1. Braided Stream Check...") |
| params_br = {'n_channels': 5, 'sediment': 0.8} |
| res_br = simulate_braided_stream(100000, params_br, grid_size=50) |
| elev_br = res_br['elevation'] |
| |
| |
| roughness = np.std(elev_br[25, 10:40]) |
| print(f"Braided Roughness: {roughness:.4f}") |
| assert roughness > 0.0, "Braided stream should have topographic variation (channels)" |
| |
| |
| print("2. River Terrace Check...") |
| params_rt = {'uplift': 0.5, 'n_terraces': 3} |
| res_rt = simulate_river_terrace(100000, params_rt, grid_size=50) |
| elev_rt = res_rt['elevation'] |
| heights = res_rt['heights'] |
| |
| print(f"Terrace Heights recorded: {heights}") |
| |
| |
| |
| center = 25 |
| mid_elev = elev_rt[25, center] |
| |
| |
| bank_elev = elev_rt[25, 5] |
| |
| print(f"River Bed: {mid_elev:.2f}, Bank (Terrace): {bank_elev:.2f}") |
| assert bank_elev > mid_elev + 1.0, "River bed should be lower than terraces due to incision" |
| |
| print("Advanced River Physics Test Passed!") |
|
|
| if __name__ == "__main__": |
| test_river_physics_advanced() |
|
|