Geo-Lab / tests /test_river_physics_advanced.py
HANSOL
Geo-Lab v4.1 - Clean deployment
2afa69c
import sys
import os
import numpy as np
import unittest.mock
# Mock Streamlit
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
# Add path
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)...")
# 1. Braided Stream Test
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']
# Check for roughness (braiding creates noise/channel bars)
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)"
# 2. River Terrace Test
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}")
# Check for steps/terraces (profile analysis)
# Center should be lowest (current river)
center = 25
mid_elev = elev_rt[25, center]
# Banks should be higher
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()