@@ -170,6 +170,62 @@ async def test_formula_composition_missing_bat(self, mocker: MockerFixture) -> N
170170
171171 assert count == 10
172172
173+ async def test_formula_composition_constant (self , mocker : MockerFixture ) -> None :
174+ """Test the composition of formulas with constant values."""
175+ mockgrid = MockMicrogrid (grid_side_meter = True )
176+ await mockgrid .start (mocker )
177+
178+ logical_meter = microgrid .logical_meter ()
179+ engine_add = (logical_meter .grid_power + Power .from_watts (50 )).build (
180+ "grid_power_addition"
181+ )
182+ engine_sub = (logical_meter .grid_power - Power .from_watts (100 )).build (
183+ "grid_power_subtraction"
184+ )
185+ engine_mul = (logical_meter .grid_power * 2.0 ).build ("grid_power_multiplication" )
186+ engine_div = (logical_meter .grid_power / 2.0 ).build ("grid_power_division" )
187+
188+ await mockgrid .mock_resampler .send_meter_power ([100.0 ])
189+
190+ # Test addition
191+ grid_power_addition = await engine_add .new_receiver ().receive ()
192+ assert grid_power_addition .value is not None
193+ assert math .isclose (
194+ grid_power_addition .value .as_watts (),
195+ 150.0 ,
196+ )
197+
198+ # Test subtraction
199+ grid_power_subtraction = await engine_sub .new_receiver ().receive ()
200+ assert grid_power_subtraction .value is not None
201+ assert math .isclose (
202+ grid_power_subtraction .value .as_watts (),
203+ 0.0 ,
204+ )
205+
206+ # Test multiplication
207+ grid_power_multiplication = await engine_mul .new_receiver ().receive ()
208+ assert grid_power_multiplication .value is not None
209+ assert math .isclose (
210+ grid_power_multiplication .value .as_watts (),
211+ 200.0 ,
212+ )
213+
214+ # Test division
215+ grid_power_division = await engine_div .new_receiver ().receive ()
216+ assert grid_power_division .value is not None
217+ assert math .isclose (
218+ grid_power_division .value .as_watts (),
219+ 50.0 ,
220+ )
221+
222+ await engine_add ._stop () # pylint: disable=protected-access
223+ await engine_sub ._stop () # pylint: disable=protected-access
224+ await engine_mul ._stop () # pylint: disable=protected-access
225+ await engine_div ._stop () # pylint: disable=protected-access
226+ await mockgrid .cleanup ()
227+ await logical_meter .stop ()
228+
173229 async def test_3_phase_formulas (self , mocker : MockerFixture ) -> None :
174230 """Test 3 phase formulas current formulas and their composition."""
175231 mockgrid = MockMicrogrid (
0 commit comments