SensitivityVariableSetTest.java
/**
* Copyright (c) 2021, 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.sensitivity;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.commons.json.JsonUtil;
import com.powsybl.sensitivity.json.JsonSensitivityAnalysisParameters;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
class SensitivityVariableSetTest extends AbstractSerDeTest {
private static final double EPSILON_COMPARISON = 1e-5;
@Test
void test() {
WeightedSensitivityVariable variable = new WeightedSensitivityVariable("v1", 3.4);
assertEquals("v1", variable.getId());
assertEquals(3.4, variable.getWeight(), EPSILON_COMPARISON);
assertEquals("WeightedSensitivityVariable(id='v1', weight=3.4)", variable.toString());
SensitivityVariableSet variableSet = new SensitivityVariableSet("id", List.of(variable));
assertEquals("id", variableSet.getId());
assertEquals(1, variableSet.getVariables().size());
assertNotNull(variableSet.getVariables().stream().findFirst());
assertTrue(variableSet.getVariablesById().containsKey("v1"));
assertEquals("v1", variableSet.getVariables().stream().findFirst().get().getId());
assertEquals("v1", variableSet.getVariable("v1").getId());
assertEquals(3.4, variableSet.getVariable("v1").getWeight(), EPSILON_COMPARISON);
assertEquals("SensitivityVariableSet(id='id', variables={v1=WeightedSensitivityVariable(id='v1', weight=3.4)})", variableSet.toString());
}
@Test
void testKeepInsertionOrder() {
SensitivityVariableSet variableSet = new SensitivityVariableSet("id", List.of(new WeightedSensitivityVariable("firstV", 3.4),
new WeightedSensitivityVariable("secondV", 2.1), new WeightedSensitivityVariable("bVariable", 4.1),
new WeightedSensitivityVariable("aVariable", 6.1)));
assertEquals(4, variableSet.getVariables().size());
assertEquals("[firstV, secondV, bVariable, aVariable]", variableSet.getVariablesById().keySet().toString());
List<WeightedSensitivityVariable> list = new ArrayList(variableSet.getVariables());
assertEquals("firstV", list.get(0).getId());
assertEquals("secondV", list.get(1).getId());
assertEquals("bVariable", list.get(2).getId());
assertEquals("aVariable", list.get(3).getId());
}
@Test
void testJson() throws IOException {
SensitivityVariableSet variableSet = new SensitivityVariableSet("id", List.of(new WeightedSensitivityVariable("v1", 3.4),
new WeightedSensitivityVariable("v2", 2.1)));
ObjectMapper objectMapper = JsonSensitivityAnalysisParameters.createObjectMapper();
roundTripTest(variableSet, (variableSet2, jsonFile) -> JsonUtil.writeJson(jsonFile, variableSet, objectMapper),
jsonFile -> JsonUtil.readJson(jsonFile, SensitivityVariableSet.class, objectMapper), "/variableSetRef.json");
String jsonRef = String.join(System.lineSeparator(),
"[ {",
" \"id\" : \"id\",",
" \"error\" : [ {",
" \"id\" : \"v1\",",
" \"weight\" : 3.4",
" }, {",
" \"id\" : \"v2\",",
" \"weight\" : 2.1",
" } ]",
"}]");
PowsyblException e0 = assertThrows(PowsyblException.class, () -> JsonUtil.parseJson(jsonRef, SensitivityVariableSet::parseJson));
assertEquals("Unexpected field: error", e0.getMessage());
}
}