Files
Enelix-EMS/tests/EinspeiseReglerTest.php
2026-09-28 17:47:22 +00:00

86 lines
2.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Belevo\EnelixEMS\Tests;
use Belevo\EnelixEMS\EinspeiseRegler;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
final class EinspeiseReglerTest extends TestCase
{
public function testUeberschreitungWirdAufDieGesamtanlageBegrenzt(): void
{
$ergebnis = EinspeiseRegler::verteile(
-15000.0,
10000.0,
[
['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 10000],
['ID' => 'wr-2', 'Nennleistung_W' => 5000, 'Istleistung_W' => 5000],
]
);
self::assertSame(10000.0, $ergebnis['ZielGesamtleistung_W']);
self::assertSame(5000.0, $ergebnis['Abregelbedarf_W']);
self::assertSame(6666.667, $ergebnis['Grenzen_W']['wr-1']);
self::assertSame(3333.333, $ergebnis['Grenzen_W']['wr-2']);
}
public function testAbregelungFolgtDerTatsaechlichenErzeugung(): void
{
$ergebnis = EinspeiseRegler::verteile(
-10000.0,
5000.0,
[
['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 10000],
['ID' => 'wr-2', 'Nennleistung_W' => 10000, 'Istleistung_W' => 0],
]
);
self::assertSame(5000.0, $ergebnis['Grenzen_W']['wr-1']);
self::assertSame(0.0, $ergebnis['Grenzen_W']['wr-2']);
}
public function testFreierNetzspielraumHebtEineBestehendeBegrenzungAn(): void
{
$ergebnis = EinspeiseRegler::verteile(
-6000.0,
10000.0,
[
['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 4000],
['ID' => 'wr-2', 'Nennleistung_W' => 10000, 'Istleistung_W' => 2000],
],
['wr-1' => 5000, 'wr-2' => 5000]
);
self::assertSame(14000.0, $ergebnis['ZielGesamtleistung_W']);
self::assertSame(7000.0, $ergebnis['Grenzen_W']['wr-1']);
self::assertSame(7000.0, $ergebnis['Grenzen_W']['wr-2']);
}
public function testRegelungFolgtAuchKleinenAbweichungenStufenlos(): void
{
$ergebnis = EinspeiseRegler::verteile(
-10050.0,
10000.0,
[['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 9000]],
['wr-1' => 8000]
);
self::assertSame(7950.0, $ergebnis['ZielGesamtleistung_W']);
}
public function testStellwerteWerdenInProzentOderWattAusgegeben(): void
{
self::assertSame(62.5, EinspeiseRegler::stellwert(5000.0, 8000.0, 'percent'));
self::assertSame(5000.0, EinspeiseRegler::stellwert(5000.0, 8000.0, 'watt'));
}
public function testUngueltigeBegrenzungsartWirdAbgelehnt(): void
{
$this->expectException(InvalidArgumentException::class);
EinspeiseRegler::stellwert(5000.0, 8000.0, 'volt');
}
}