Skip to content

Commit a2898eb

Browse files
committed
Unittest the shifting matryoshka algorithm
Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 431411f commit a2898eb

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

tests/actor/_power_managing/test_shifting_matryoshka.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,3 +546,65 @@ def ensure_overlapping_bucket_request_fails() -> None:
546546
expected=20.0,
547547
batteries=overlapping_batteries,
548548
)
549+
550+
551+
async def test_matryoshka_shifting_limiting() -> None:
552+
"""Tests for the power managing actor.
553+
554+
With the following scenario:
555+
556+
| Actor | System Limits | Specified Limits | Desired | Adjusted | Aggregate |
557+
| Prio | | | Power | Power | Power |
558+
|-------|-------------------|------------------|---------|----------|-----------|
559+
| 7 | -100 kW .. 100 kW | None | 10 kW | 10 kW | 10 kW |
560+
| 6 | -110 kW .. 90 kW | -110 kW .. 80 kW | 10 kW | 10 kW | 20 kW |
561+
| 5 | -120 kW .. 70 kW | -100 kW .. 80 kW | 80 kW | 70 kW | 90 kW |
562+
| 4 | -170 kW .. 0 kW | None | -120 kW | -120 kW | -30 kW |
563+
| 3 | -50 kW .. 120 kW | None | 60 kW | 60 kW | 30 kW |
564+
| 2 | -110 kW .. 60 kW | -40 kW .. 30 kW | 20 kW | 20 kW | 50 kW |
565+
| 1 | -60 kW .. 10 kW | -50 kW .. 40 kW | 25 kW | 10 kW | 60 kW |
566+
| 0 | -60 kW .. 0 kW | None | 12 kW | 0 kW | 60 kW |
567+
| -1 | -60 kW .. 0 kW | -40 kW .. -10 kW | -10 kW | -10 kW | 50 kW |
568+
|-------|-------------------|------------------|---------|----------|-----------|
569+
| | | | | Power | |
570+
| | | | | Setpoint | 50 kW |
571+
"""
572+
batteries = frozenset({2, 5})
573+
574+
system_bounds = _base_types.SystemBounds(
575+
timestamp=datetime.now(tz=timezone.utc),
576+
inclusion_bounds=timeseries.Bounds(
577+
lower=Power.from_watts(-100.0), upper=Power.from_watts(100.0)
578+
),
579+
exclusion_bounds=timeseries.Bounds(
580+
lower=Power.from_watts(-0.0), upper=Power.from_watts(0.0)
581+
),
582+
)
583+
584+
tester = StatefulTester(batteries, system_bounds)
585+
tester.tgt_power(priority=7, power=10.0, bounds=(None, None), expected=10.0)
586+
tester.bounds(priority=7, expected_power=10.0, expected_bounds=(-100.0, 100.0))
587+
tester.bounds(priority=6, expected_power=10.0, expected_bounds=(-110.0, 90.0))
588+
589+
tester.tgt_power(priority=6, power=10.0, bounds=(-110.0, 80.0), expected=20.0)
590+
tester.bounds(priority=5, expected_power=20.0, expected_bounds=(-120.0, 70.0))
591+
592+
tester.tgt_power(priority=5, power=80.0, bounds=(-100.0, 80.0), expected=90.0)
593+
tester.bounds(priority=4, expected_power=90.0, expected_bounds=(-170.0, 0.0))
594+
595+
tester.tgt_power(priority=4, power=-120.0, bounds=(None, None), expected=-30.0)
596+
tester.bounds(priority=3, expected_power=-30.0, expected_bounds=(-50.0, 120.0))
597+
598+
tester.tgt_power(priority=3, power=60.0, bounds=(None, None), expected=30.0)
599+
tester.bounds(priority=2, expected_power=30.0, expected_bounds=(-110.0, 60.0))
600+
601+
tester.tgt_power(priority=2, power=20.0, bounds=(-40.0, 30.0), expected=50.0)
602+
tester.bounds(priority=1, expected_power=50.0, expected_bounds=(-60.0, 10.0))
603+
604+
tester.tgt_power(priority=1, power=25.0, bounds=(-50.0, 40.0), expected=60.0)
605+
tester.bounds(priority=0, expected_power=60.0, expected_bounds=(-60.0, 0.0))
606+
607+
tester.tgt_power(priority=0, power=12.0, bounds=(None, None), expected=None)
608+
tester.bounds(priority=-1, expected_power=60.0, expected_bounds=(-60.0, 0.0))
609+
610+
tester.tgt_power(priority=-1, power=-10.0, bounds=(-40.0, -10.0), expected=50.0)

0 commit comments

Comments
 (0)