import pytest from reactor_sim.state import CoolantLoopState, TurbineState from reactor_sim.turbine import Turbine def test_turbine_spools_toward_target_output(): turbine = Turbine() loop = CoolantLoopState( temperature_in=600.0, temperature_out=650.0, pressure=6.0, mass_flow_rate=20_000.0, steam_quality=0.9, ) state = TurbineState( steam_enthalpy=0.0, shaft_power_mw=0.0, electrical_output_mw=0.0, condenser_temperature=300.0, ) target_electric = min( turbine.rated_output_mw, 300.0 * turbine.mechanical_efficiency * turbine.generator_efficiency ) dt = 5.0 turbine.step(loop, state, steam_power_mw=300.0, dt=dt) assert 0.0 < state.electrical_output_mw < target_electric for _ in range(5): turbine.step(loop, state, steam_power_mw=300.0, dt=dt) assert state.electrical_output_mw == pytest.approx(target_electric, rel=0.05) def test_turbine_produces_no_power_without_steam(): turbine = Turbine() loop = CoolantLoopState( temperature_in=295.0, temperature_out=295.0, pressure=6.0, mass_flow_rate=20_000.0, steam_quality=0.0, ) state = TurbineState( steam_enthalpy=0.0, shaft_power_mw=0.0, electrical_output_mw=0.0, condenser_temperature=300.0, ) turbine.step(loop, state, steam_power_mw=0.0, dt=1.0) assert state.electrical_output_mw == 0.0 assert state.shaft_power_mw == 0.0