ZoneToZonePtdfDefinitionTest.java

package com.powsybl.openrao.raoapi;

import com.powsybl.openrao.commons.EICode;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.iidm.network.Country;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;

import static org.junit.jupiter.api.Assertions.*;

class ZoneToZonePtdfDefinitionTest {

    private static final double DOUBLE_TOLERANCE = 0.01;

    @Test
    void testSimpleZoneToZonePtdfWithCountryCode() {

        ZoneToZonePtdfDefinition zTozPtdf = new ZoneToZonePtdfDefinition("{FR}-{ES}");

        assertEquals(2, zTozPtdf.getZoneToSlackPtdfs().size());
        assertEquals(1, zTozPtdf.getWeight(new EICode(Country.FR)), DOUBLE_TOLERANCE);
        assertEquals(-1, zTozPtdf.getWeight(new EICode(Country.ES)), DOUBLE_TOLERANCE);
    }

    @Test
    void testSimpleZoneToZonePtdfWithEiCode() {

        ZoneToZonePtdfDefinition zTozPtdf = new ZoneToZonePtdfDefinition("{22Y201903145---4}-{22Y201903144---9}");

        assertEquals(2, zTozPtdf.getZoneToSlackPtdfs().size());

        assertEquals(1, zTozPtdf.getWeight(new EICode("22Y201903145---4")), DOUBLE_TOLERANCE);
        assertEquals(-1, zTozPtdf.getWeight(new EICode("22Y201903144---9")), DOUBLE_TOLERANCE);
    }

    @Test
    void testSimpleZoneToZonePtdfWithMixedCode() {

        ZoneToZonePtdfDefinition zTozPtdf = new ZoneToZonePtdfDefinition("{BE}-{22Y201903144---9}");

        assertEquals(2, zTozPtdf.getZoneToSlackPtdfs().size());
        assertEquals(1, zTozPtdf.getWeight(new EICode(Country.BE)), DOUBLE_TOLERANCE);
        assertEquals(-1, zTozPtdf.getWeight(new EICode("22Y201903144---9")), DOUBLE_TOLERANCE);
    }

    @Test
    void testComplexZoneToZonePtdfWithMixedCode() {

        ZoneToZonePtdfDefinition zTozPtdf = new ZoneToZonePtdfDefinition("{BE}-{22Y201903144---9}-{DE}+{22Y201903145---4}");

        assertEquals(4, zTozPtdf.getZoneToSlackPtdfs().size());
        assertEquals(4, zTozPtdf.getEiCodes().size());
        assertTrue(zTozPtdf.getEiCodes().contains(new EICode(Country.BE)));
        assertTrue(zTozPtdf.getEiCodes().contains(new EICode("22Y201903144---9")));
        assertTrue(zTozPtdf.getEiCodes().contains(new EICode(Country.DE)));
        assertTrue(zTozPtdf.getEiCodes().contains(new EICode("22Y201903145---4")));

        assertEquals(1, zTozPtdf.getWeight(new EICode(Country.BE)), DOUBLE_TOLERANCE);
        assertEquals(-1, zTozPtdf.getWeight(new EICode("22Y201903144---9")), DOUBLE_TOLERANCE);
        assertEquals(-1, zTozPtdf.getWeight(new EICode(Country.DE)), DOUBLE_TOLERANCE);
        assertEquals(1, zTozPtdf.getWeight(new EICode("22Y201903145---4")), DOUBLE_TOLERANCE);
    }

    @Test
    void testWrongSyntax1() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("FR-ES"));
    }

    @Test
    void testWrongSyntax2() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("FR/ES"));
    }

    @Test
    void testWrongSyntax3() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("{{FR}-{ES}"));
    }

    @Test
    void testWrongSyntax4() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("{FR}/{ES}"));
    }

    @Test
    void testWrongSyntax5() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("{FRANCE}-{ES}"));
    }

    @Test
    void testWrongSyntax6() {
        assertThrows(OpenRaoException.class, () -> new ZoneToZonePtdfDefinition("{}/{ES}"));
    }

    @Test
    void testWrongCountryCode() {
        assertThrows(IllegalArgumentException.class, () -> new ZoneToZonePtdfDefinition("{XX}/{ES}"));
    }

    @Test
    void testToString() {
        ZoneToZonePtdfDefinition zTozPtdf1 = new ZoneToZonePtdfDefinition("{FR}-{ES}");
        assertEquals("{FR}-{ES}", zTozPtdf1.toString());

        ZoneToZonePtdfDefinition zTozPtdf2 = new ZoneToZonePtdfDefinition(new ArrayList<>(Arrays.asList(
            new ZoneToZonePtdfDefinition.WeightedZoneToSlackPtdf(new EICode(Country.FR), 1),
            new ZoneToZonePtdfDefinition.WeightedZoneToSlackPtdf(new EICode(Country.ES), -1))));
        assertEquals("+{FR}-{ES}", zTozPtdf2.toString());

        ZoneToZonePtdfDefinition zTozPtdf3 = new ZoneToZonePtdfDefinition(new ArrayList<>(Arrays.asList(
            new ZoneToZonePtdfDefinition.WeightedZoneToSlackPtdf(new EICode(Country.FR), -1),
            new ZoneToZonePtdfDefinition.WeightedZoneToSlackPtdf(new EICode(Country.ES), -1))));
        assertEquals("-{FR}-{ES}", zTozPtdf3.toString());
    }
}