90 lines
2.9 KiB
PHP
90 lines
2.9 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,
|
|
100.0,
|
|
[
|
|
['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 10000],
|
|
['ID' => 'wr-2', 'Nennleistung_W' => 5000, 'Istleistung_W' => 5000],
|
|
]
|
|
);
|
|
|
|
self::assertSame(10100.0, $ergebnis['ZielGesamtleistung_W']);
|
|
self::assertSame(4900.0, $ergebnis['Abregelbedarf_W']);
|
|
self::assertSame(6733.333, $ergebnis['Grenzen_W']['wr-1']);
|
|
self::assertSame(3366.667, $ergebnis['Grenzen_W']['wr-2']);
|
|
}
|
|
|
|
public function testAbregelungFolgtDerTatsaechlichenErzeugung(): void
|
|
{
|
|
$ergebnis = EinspeiseRegler::verteile(
|
|
-10000.0,
|
|
5000.0,
|
|
0.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,
|
|
100.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(13900.0, $ergebnis['ZielGesamtleistung_W']);
|
|
self::assertSame(6950.0, $ergebnis['Grenzen_W']['wr-1']);
|
|
self::assertSame(6950.0, $ergebnis['Grenzen_W']['wr-2']);
|
|
}
|
|
|
|
public function testToleranzVerhindertPendelnAmGrenzwert(): void
|
|
{
|
|
$ergebnis = EinspeiseRegler::verteile(
|
|
-10050.0,
|
|
10000.0,
|
|
100.0,
|
|
[['ID' => 'wr-1', 'Nennleistung_W' => 10000, 'Istleistung_W' => 9000]],
|
|
['wr-1' => 8000]
|
|
);
|
|
|
|
self::assertSame(8000.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');
|
|
}
|
|
}
|