Skip to content

Commit d47c657

Browse files
Add test for composing formulas with constants
Signed-off-by: Matthias Wende <[email protected]>
1 parent 7dc5283 commit d47c657

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

tests/timeseries/_formula_engine/test_formula_composition.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)