GlobalSensitivityResultTest.java
/*
* Copyright (c) 2025, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.powsybl.openrao.searchtreerao.marmot.results;
import com.powsybl.iidm.network.TwoSides;
import com.powsybl.openrao.commons.TemporalDataImpl;
import com.powsybl.openrao.commons.Unit;
import com.powsybl.openrao.data.crac.api.State;
import com.powsybl.openrao.data.crac.api.cnec.FlowCnec;
import com.powsybl.openrao.data.crac.api.rangeaction.PstRangeAction;
import com.powsybl.openrao.data.raoresult.api.ComputationStatus;
import com.powsybl.openrao.searchtreerao.marmot.TestsUtils;
import com.powsybl.openrao.searchtreerao.result.api.SensitivityResult;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Thomas Bouquet {@literal <thomas.bouquet at rte-france.com>}
*/
class GlobalSensitivityResultTest {
private FlowCnec flowCnecTimestamp1;
private FlowCnec flowCnecTimestamp2;
private FlowCnec flowCnecTimestamp3;
private PstRangeAction pstRangeActionTimestamp1;
private PstRangeAction pstRangeActionTimestamp2;
private PstRangeAction pstRangeActionTimestamp3;
private SensitivityResult sensitivityResultTimestamp1;
private SensitivityResult sensitivityResultTimestamp2;
private SensitivityResult sensitivityResultTimestamp3;
@BeforeEach
void setUp() {
State stateTimestamp1 = TestsUtils.mockState(TestsUtils.TIMESTAMP_1);
State stateTimestamp2 = TestsUtils.mockState(TestsUtils.TIMESTAMP_2);
State stateTimestamp3 = TestsUtils.mockState(TestsUtils.TIMESTAMP_3);
flowCnecTimestamp1 = TestsUtils.mockFlowCnec(stateTimestamp1);
flowCnecTimestamp2 = TestsUtils.mockFlowCnec(stateTimestamp2);
flowCnecTimestamp3 = TestsUtils.mockFlowCnec(stateTimestamp3);
pstRangeActionTimestamp1 = Mockito.mock(PstRangeAction.class);
pstRangeActionTimestamp2 = Mockito.mock(PstRangeAction.class);
pstRangeActionTimestamp3 = Mockito.mock(PstRangeAction.class);
sensitivityResultTimestamp1 = TestsUtils.createMockedSensitivityResult(ComputationStatus.DEFAULT);
TestsUtils.mockSensitivityResult(sensitivityResultTimestamp1, flowCnecTimestamp1, pstRangeActionTimestamp1, 15.);
sensitivityResultTimestamp2 = TestsUtils.createMockedSensitivityResult(ComputationStatus.PARTIAL_FAILURE);
TestsUtils.mockSensitivityResult(sensitivityResultTimestamp2, flowCnecTimestamp2, pstRangeActionTimestamp2, 30.);
sensitivityResultTimestamp3 = TestsUtils.createMockedSensitivityResult(ComputationStatus.FAILURE);
TestsUtils.mockSensitivityResult(sensitivityResultTimestamp3, flowCnecTimestamp3, pstRangeActionTimestamp3, 45.);
}
@Test
void testSensitivityStatusWithFailure() {
SensitivityResult globalSensitivityResult = new GlobalSensitivityResult(new TemporalDataImpl<>(Map.of(TestsUtils.TIMESTAMP_1, sensitivityResultTimestamp1, TestsUtils.TIMESTAMP_2, sensitivityResultTimestamp2, TestsUtils.TIMESTAMP_3, sensitivityResultTimestamp3)));
assertEquals(ComputationStatus.FAILURE, globalSensitivityResult.getSensitivityStatus());
assertEquals(ComputationStatus.FAILURE, globalSensitivityResult.getSensitivityStatus());
}
@Test
void testComputationStatusWithPartialFailure() {
SensitivityResult globalSensitivityResult = new GlobalSensitivityResult(new TemporalDataImpl<>(Map.of(TestsUtils.TIMESTAMP_1, sensitivityResultTimestamp1, TestsUtils.TIMESTAMP_2, sensitivityResultTimestamp2)));
assertEquals(ComputationStatus.PARTIAL_FAILURE, globalSensitivityResult.getSensitivityStatus());
assertEquals(ComputationStatus.PARTIAL_FAILURE, globalSensitivityResult.getSensitivityStatus());
}
@Test
void testComputationStatusDefault() {
SensitivityResult globalSensitivityResult = new GlobalSensitivityResult(new TemporalDataImpl<>(Map.of(TestsUtils.TIMESTAMP_1, sensitivityResultTimestamp1)));
assertEquals(ComputationStatus.DEFAULT, globalSensitivityResult.getSensitivityStatus());
assertEquals(ComputationStatus.DEFAULT, globalSensitivityResult.getSensitivityStatus());
}
@Test
void testSensitivityValue() {
SensitivityResult globalSensitivityResult = new GlobalSensitivityResult(new TemporalDataImpl<>(Map.of(TestsUtils.TIMESTAMP_1, sensitivityResultTimestamp1, TestsUtils.TIMESTAMP_2, sensitivityResultTimestamp2, TestsUtils.TIMESTAMP_3, sensitivityResultTimestamp3)));
assertEquals(15., globalSensitivityResult.getSensitivityValue(flowCnecTimestamp1, TwoSides.ONE, pstRangeActionTimestamp1, Unit.MEGAWATT));
assertEquals(30., globalSensitivityResult.getSensitivityValue(flowCnecTimestamp2, TwoSides.ONE, pstRangeActionTimestamp2, Unit.MEGAWATT));
assertEquals(45., globalSensitivityResult.getSensitivityValue(flowCnecTimestamp3, TwoSides.ONE, pstRangeActionTimestamp3, Unit.MEGAWATT));
}
}