diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0c56016c..2d2de49f9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,10 @@ +# +# 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/. +# + name: CI on: [push] diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 85b56fe65..5d9a3ff33 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -1,3 +1,10 @@ +# +# 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/. +# + name: clang-tidy on: diff --git a/CMakeLists.txt b/CMakeLists.txt index ab1b6e350..a01822dc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(powsybl-iidm4cpp) set(IIDM_VERSION_MAJOR 1) -set(IIDM_VERSION_MINOR 4) +set(IIDM_VERSION_MINOR 5) set(IIDM_VERSION_PATCH 0) set(IIDM_VERSION ${IIDM_VERSION_MAJOR}.${IIDM_VERSION_MINOR}.${IIDM_VERSION_PATCH}) set(IIDM_SOVERSION ${IIDM_VERSION_MAJOR}) diff --git a/doxygen/Doxyfile.in b/doxygen/Doxyfile.in index bfd417384..489146d85 100644 --- a/doxygen/Doxyfile.in +++ b/doxygen/Doxyfile.in @@ -1,3 +1,10 @@ +# +# 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/. +# + # Doxyfile 1.8.14 # This file describes the settings to be used by the documentation system diff --git a/doxygen/cppreference-doxygen-web.tag.xml b/doxygen/cppreference-doxygen-web.tag.xml index 747688c90..531688fef 100644 --- a/doxygen/cppreference-doxygen-web.tag.xml +++ b/doxygen/cppreference-doxygen-web.tag.xml @@ -1,4 +1,5 @@ + std diff --git a/doxygen/powsybl.svg b/doxygen/powsybl.svg index 817fcede8..b18830248 100644 --- a/doxygen/powsybl.svg +++ b/doxygen/powsybl.svg @@ -1,5 +1,10 @@ - +
+ *           LD        G
+ *           |    B1   |
+ *           |---[+]---|
+ *       B2 [-]       [+] B3
+ *           |    C    |
+ *  BBS1 --------[-]-------- BBS2
+ * 
+ */ +Network createNbkNetwork() { + Network network("test", "test"); + Substation& s = network.newSubstation() + .setId("S") + .setCountry(Country::FR) + .add(); + VoltageLevel& vl = s.newVoltageLevel() + .setId("VL") + .setNominalV(400.0) + .setTopologyKind(TopologyKind::NODE_BREAKER) + .add(); + vl.getNodeBreakerView().newBusbarSection() + .setId("BBS1") + .setNode(0) + .add(); + vl.getNodeBreakerView().newBusbarSection() + .setId("BBS2") + .setNode(1) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("C") + .setNode1(1) + .setNode2(0) + .setOpen(true) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("B2") + .setNode1(0) + .setNode2(2) + .setOpen(true) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("B1") + .setNode1(2) + .setNode2(3) + .setOpen(false) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("B3") + .setNode1(3) + .setNode2(1) + .setOpen(false) + .add(); + vl.newLoad() + .setId("LD") + .setNode(2) + .setP0(1) + .setQ0(1) + .add(); + vl.newGenerator() + .setId("G") + .setNode(3) + .setMinP(-9999.99) + .setMaxP(9999.99) + .setVoltageRegulatorOn(true) + .setTargetV(400) + .setTargetP(1) + .setTargetQ(0) + .add(); + return network; +} + +/** + *
+ *     L
+ *     |
+ *  ---1---
+ *  |     |
+ * BR1   BR2
+ *  |     |
+ *  ---0--- BBS1
+ * 
+ */ +Network createDiamondNetwork() { + Network network("test", "test"); + Substation& s = network.newSubstation() + .setId("S") + .setCountry(Country::FR) + .add(); + VoltageLevel& vl = s.newVoltageLevel() + .setId("VL") + .setNominalV(400.0) + .setTopologyKind(TopologyKind::NODE_BREAKER) + .add(); + vl.getNodeBreakerView().newBusbarSection() + .setId("BBS1") + .setNode(0) + .add(); + vl.newLoad() + .setId("L") + .setNode(1) + .setP0(1) + .setQ0(1) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("BR1") + .setNode1(1) + .setNode2(0) + .setOpen(false) + .add(); + vl.getNodeBreakerView().newBreaker() + .setId("BR2") + .setNode1(1) + .setNode2(0) + .setOpen(false) + .add(); + return network; +} + +BOOST_AUTO_TEST_SUITE(NetworkTestSuite) + +BOOST_AUTO_TEST_CASE(NodeBreakerConnectConnectedLoad) { + Network network = createNbkNetwork(); + Load& l = network.getLoad("LD"); + BOOST_CHECK(l.getTerminal().isConnected()); + BOOST_CHECK(network.getSwitch("B2").isOpen()); + + l.getTerminal().connect(); + BOOST_CHECK(network.getSwitch("B2").isOpen()); + BOOST_CHECK(l.getTerminal().isConnected()); +} + +BOOST_AUTO_TEST_CASE(NodeBreakerDisconnectDisconnectedLoad) { + Network network = createNbkNetwork(); + network.getSwitch("B3").setOpen(true); + Load& l = network.getLoad("LD"); + BOOST_CHECK(!l.getTerminal().isConnected()); + + l.getTerminal().disconnect(); + BOOST_CHECK(!network.getSwitch("B1").isOpen()); + BOOST_CHECK(!l.getTerminal().isConnected()); +} + +BOOST_AUTO_TEST_CASE(NodeBreakerDisconnectionDiamond) { + Network network = createDiamondNetwork(); + Load& l = network.getLoad("L"); + BOOST_CHECK(l.getTerminal().isConnected()); + l.getTerminal().disconnect(); + BOOST_CHECK(!l.getTerminal().isConnected()); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace iidm + +} // namespace powsybl diff --git a/test/iidm/NodeBreakerVoltageLevelTest.cpp b/test/iidm/NodeBreakerVoltageLevelTest.cpp index 5b57adcf2..1f848dfe1 100644 --- a/test/iidm/NodeBreakerVoltageLevelTest.cpp +++ b/test/iidm/NodeBreakerVoltageLevelTest.cpp @@ -19,8 +19,10 @@ #include #include #include +#include #include #include +#include #include @@ -1186,6 +1188,62 @@ BOOST_AUTO_TEST_CASE(TestRemoveVoltageLevelWithInternalConnectionsIssue) { POWSYBL_ASSERT_THROW(network.getVoltageLevel("S5 10kV"), PowsyblException, "Unable to find to the identifiable 'S5 10kV'"); } +BOOST_AUTO_TEST_CASE(issue318_invalidateCache) { + Network network("test", "test"); + Substation& substation = network.newSubstation() + .setId("S1") + .setCountry(Country::FR) + .setTso("TSO") + .add(); + VoltageLevel& vl1 = substation.newVoltageLevel() + .setId("VL1") + .setTopologyKind(TopologyKind::NODE_BREAKER) + .setNominalV(90.0) + .setLowVoltageLimit(88.0) + .setHighVoltageLimit(96.0) + .add(); + + BusbarSection& bbs1 = vl1.getNodeBreakerView().newBusbarSection() + .setId("BBS1") + .setName("BBS1_NAME") + .setNode(0) + .add(); + + // In that case, the bus cache is initialized, but there is no bus for node 0 + BOOST_CHECK(!bbs1.getTerminal().getBusView().getBus()); + + BusbarSection& bbs2 = vl1.getNodeBreakerView().newBusbarSection() + .setId("BBS2") + .setName("BBS2_NAME") + .setNode(1) + .add(); + + // Without the fix, this call throws an exception (ArrayIndexOutOfBoundsException), but an invalid reference is expected + BOOST_CHECK(!bbs2.getTerminal().getBusView().getBus()); +} + +BOOST_AUTO_TEST_CASE(NbkComprehensiveErrorMessage) { + Network network = powsybl::network::FourSubstationsNodeBreakerFactory::create(); + BusbarSection& busbarSection = network.getBusbarSection("S1VL2_BBS1"); + TwoWindingsTransformer& twt = network.getTwoWindingsTransformer("TWT"); + twt.getPhaseTapChanger().setRegulationTerminal(stdcxx::ref(busbarSection.getTerminal())); + + stdcxx::Properties properties; + properties.set(converter::ExportOptions::TOPOLOGY_LEVEL, "NODE_BREAKER"); + + std::stringstream ss; + + // make sure no error is thrown while exporting to NODE_BREAKER topology + BOOST_CHECK_NO_THROW({ + Network::writeXml("network.xiidm", ss, network, converter::ExportOptions(properties)); + Network::readXml("network.xiidm", ss); + }); + + // make sure an error is thrown when exporting to BUS_BREAKER topology (see #295) + properties.set(converter::ExportOptions::TOPOLOGY_LEVEL, "BUS_BREAKER"); + POWSYBL_ASSERT_THROW(Network::writeXml("network.xiidm", ss, network, converter::ExportOptions(properties)), PowsyblException, "Terminal ref should not point to a busbar section (here S1VL2_BBS1). Try to export in node-breaker or delete this terminal ref."); +} + BOOST_AUTO_TEST_SUITE_END() } // namespace iidm diff --git a/test/iidm/TieLineTest.cpp b/test/iidm/TieLineTest.cpp index e4716bb38..e73639c4e 100644 --- a/test/iidm/TieLineTest.cpp +++ b/test/iidm/TieLineTest.cpp @@ -102,8 +102,6 @@ Network createTieLineTestNetwork() { .setUcteXnodeCode("UcteXnodeCode") .newHalfLine1() .setId("H1_TL_VL1_VL3") - .setXnodeP(1) - .setXnodeQ(2) .setR(6.0) .setX(66.0) .setG1(0.2) @@ -113,8 +111,6 @@ Network createTieLineTestNetwork() { .add() .newHalfLine2() .setId("H2_TL_VL1_VL3") - .setXnodeP(3) - .setXnodeQ(4) .setR(7.0) .setX(77.0) .setG1(0.6) @@ -160,8 +156,6 @@ BOOST_AUTO_TEST_CASE(constructor) { BOOST_CHECK_CLOSE(0.4, half1.getB1(), std::numeric_limits::epsilon()); BOOST_CHECK_CLOSE(0.3, half1.getG2(), std::numeric_limits::epsilon()); BOOST_CHECK_CLOSE(0.5, half1.getB2(), std::numeric_limits::epsilon()); - BOOST_CHECK_CLOSE(1.0, half1.getXnodeP(), std::numeric_limits::epsilon()); - BOOST_CHECK_CLOSE(2.0, half1.getXnodeQ(), std::numeric_limits::epsilon()); POWSYBL_ASSERT_THROW(modifiableTieLine.setR(0), ValidationException, "AC tie line 'TL_VL1_VL3': direct modification of characteristics not supported for tie lines"); POWSYBL_ASSERT_THROW(modifiableTieLine.setX(0), ValidationException, "AC tie line 'TL_VL1_VL3': direct modification of characteristics not supported for tie lines"); @@ -195,12 +189,6 @@ BOOST_AUTO_TEST_CASE(constructor) { BOOST_CHECK(stdcxx::areSame(half1, modifiableHalfLine.setB2(6.0))); BOOST_CHECK_CLOSE(6.0, half1.getB2(), std::numeric_limits::epsilon()); - BOOST_CHECK(stdcxx::areSame(half1, modifiableHalfLine.setXnodeP(7.0))); - BOOST_CHECK_CLOSE(7.0, half1.getXnodeP(), std::numeric_limits::epsilon()); - - BOOST_CHECK(stdcxx::areSame(half1, modifiableHalfLine.setXnodeQ(8.0))); - BOOST_CHECK_CLOSE(8.0, half1.getXnodeQ(), std::numeric_limits::epsilon()); - const TieLine::HalfLine& half2 = tieLine.getHalf2(); BOOST_CHECK_EQUAL("H2_TL_VL1_VL3", half2.getId()); BOOST_CHECK_EQUAL("H2_TL_VL1_VL3", half2.getName()); @@ -210,8 +198,6 @@ BOOST_AUTO_TEST_CASE(constructor) { BOOST_CHECK_CLOSE(0.7, half2.getB1(), std::numeric_limits::epsilon()); BOOST_CHECK_CLOSE(0.9, half2.getG2(), std::numeric_limits::epsilon()); BOOST_CHECK_CLOSE(1.2, half2.getB2(), std::numeric_limits::epsilon()); - BOOST_CHECK_CLOSE(3.0, half2.getXnodeP(), std::numeric_limits::epsilon()); - BOOST_CHECK_CLOSE(4.0, half2.getXnodeQ(), std::numeric_limits::epsilon()); BOOST_CHECK(stdcxx::areSame(half1, tieLine.getHalf(Branch::Side::ONE))); BOOST_CHECK(stdcxx::areSame(half2, tieLine.getHalf(Branch::Side::TWO))); @@ -255,8 +241,6 @@ BOOST_AUTO_TEST_CASE(adderFail) { .setUcteXnodeCode("UcteXnodeCodeTest") .newHalfLine1() .setId("H1_TL_VL2_VL4") - .setXnodeP(10) - .setXnodeQ(20) .setR(60.0) .setX(660.0) .setG1(2.0) @@ -266,8 +250,6 @@ BOOST_AUTO_TEST_CASE(adderFail) { .add() .newHalfLine2() .setId("H2_TL_VL2_VL4") - .setXnodeP(30) - .setXnodeQ(40) .setR(70.0) .setX(770.0) .setG1(6.0) @@ -353,11 +335,6 @@ BOOST_AUTO_TEST_CASE(adder) { POWSYBL_ASSERT_THROW(halfLineAdder1.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': b2 is not set for half line 1"); halfLineAdder1.setB2(5.0); - POWSYBL_ASSERT_THROW(halfLineAdder1.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': xnodeP is not set for half line 1"); - halfLineAdder1.setXnodeP(10.0); - - POWSYBL_ASSERT_THROW(halfLineAdder1.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': xnodeQ is not set for half line 1"); - halfLineAdder1.setXnodeQ(20.0); halfLineAdder1.add(); POWSYBL_ASSERT_THROW(tieLineAdder.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': half line 2 is not set"); @@ -385,12 +362,6 @@ BOOST_AUTO_TEST_CASE(adder) { POWSYBL_ASSERT_THROW(halfLineAdder2.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': b2 is not set for half line 2"); halfLineAdder2.setB2(12.0); - - POWSYBL_ASSERT_THROW(halfLineAdder2.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': xnodeP is not set for half line 2"); - halfLineAdder2.setXnodeP(30.0); - - POWSYBL_ASSERT_THROW(halfLineAdder2.add(), ValidationException, "AC tie line 'UNIQUE_TIE_LINE_ID': xnodeQ is not set for half line 2"); - halfLineAdder2.setXnodeQ(40.0); halfLineAdder2.add(); halfLineAdder2.setFictitious(true); @@ -431,8 +402,6 @@ BOOST_AUTO_TEST_CASE(fictitious) { .setG2(3.0) .setR(60.0) .setX(660.0) - .setXnodeP(10.0) - .setXnodeQ(20.0) .setFictitious(true) .add(); @@ -446,8 +415,6 @@ BOOST_AUTO_TEST_CASE(fictitious) { .setG2(9.0) .setR(70.0) .setX(700.0) - .setXnodeP(30.0) - .setXnodeQ(40.0) .setFictitious(false) .add(); @@ -457,6 +424,29 @@ BOOST_AUTO_TEST_CASE(fictitious) { BOOST_CHECK(line.isFictitious()); } +BOOST_AUTO_TEST_CASE(getBoundary) { + Network network = createTieLineTestNetwork(); + TieLine& tieLine = dynamic_cast(network.getLine("TL_VL1_VL3")); + const TieLine& cTieLine = dynamic_cast(network.getLine("TL_VL1_VL3")); + + tieLine.getTerminal1().getBusView().getBus().get().setAngle(2); + tieLine.getTerminal1().setP(3); + tieLine.getTerminal1().setQ(4); + tieLine.getTerminal1().getBusView().getBus().get().setV(5); + BOOST_CHECK(stdcxx::areSame(cTieLine.getHalf1().getBoundary(), tieLine.getHalf1().getBoundary())); + const Boundary& cBoundary = tieLine.getHalf1().getBoundary(); + Boundary& boundary = tieLine.getHalf1().getBoundary(); + BOOST_CHECK_CLOSE(168.31385922271897, boundary.getAngle(), std::numeric_limits::epsilon()); + BOOST_CHECK_CLOSE(10051.099999999999, boundary.getP(), std::numeric_limits::epsilon()); + BOOST_CHECK_CLOSE(-16154.5, boundary.getQ(), std::numeric_limits::epsilon()); + BOOST_CHECK_CLOSE(182.584227139148, boundary.getV(), std::numeric_limits::epsilon()); + BOOST_CHECK(stdcxx::areSame(cTieLine, cBoundary.getConnectable())); + BOOST_CHECK(stdcxx::areSame(cTieLine, boundary.getConnectable())); + BOOST_CHECK_EQUAL(Branch::Side::ONE, *boundary.getSide()); + BOOST_CHECK(stdcxx::areSame(cTieLine.getTerminal(Branch::Side::ONE).getVoltageLevel(), cBoundary.getVoltageLevel())); + BOOST_CHECK(stdcxx::areSame(cTieLine.getTerminal(Branch::Side::ONE).getVoltageLevel(), boundary.getVoltageLevel())); +} + BOOST_AUTO_TEST_SUITE_END() } // namespace iidm diff --git a/test/iidm/converter/xml/CMakeLists.txt b/test/iidm/converter/xml/CMakeLists.txt index 9e7d3289c..603ab31dd 100644 --- a/test/iidm/converter/xml/CMakeLists.txt +++ b/test/iidm/converter/xml/CMakeLists.txt @@ -22,6 +22,7 @@ set(EXT_SOURCES set(UNIT_TEST_SOURCES BatteryRoundTripTest.cpp EurostagTest.cpp + ExtensionProvidersTest.cpp FictitiousSwitchTest.cpp FourSubstationsNodeBreakerTest.cpp HvdcRoundTripTest.cpp diff --git a/test/iidm/converter/xml/ExtensionProvidersTest.cpp b/test/iidm/converter/xml/ExtensionProvidersTest.cpp new file mode 100644 index 000000000..d1c5f77f6 --- /dev/null +++ b/test/iidm/converter/xml/ExtensionProvidersTest.cpp @@ -0,0 +1,43 @@ +/** + * 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/. + */ + +#include + +#include +#include +#include + +namespace powsybl { + +namespace iidm { + +namespace converter { + +namespace xml { + +BOOST_AUTO_TEST_SUITE(ExtensionProvidersTestSuite) + +BOOST_AUTO_TEST_CASE(findProvider) { + auto& extProvider = ExtensionProviders::getInstance(); + BOOST_CHECK(!extProvider.findProvider("test")); + POWSYBL_ASSERT_THROW(extProvider.findProviderOrThrowException("test"), PowsyblException, "No provider found for extension 'test'"); + + BOOST_CHECK(extProvider.findProvider("loadBar")); + BOOST_CHECK_NO_THROW(extProvider.findProviderOrThrowException("loadBar")); + + BOOST_CHECK_EQUAL(6, boost::size(extProvider.getProviders())); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace xml + +} // namespace converter + +} // namespace iidm + +} // namespace powsybl diff --git a/test/iidm/converter/xml/extensions/TerminalMockXmlSerializer.cpp b/test/iidm/converter/xml/extensions/TerminalMockXmlSerializer.cpp index b855ea12a..b2e65a0c2 100644 --- a/test/iidm/converter/xml/extensions/TerminalMockXmlSerializer.cpp +++ b/test/iidm/converter/xml/extensions/TerminalMockXmlSerializer.cpp @@ -38,6 +38,7 @@ TerminalMockXmlSerializer::TerminalMockXmlSerializer() : .put(IidmXmlVersion::V1_2(), {"1.2"}) .put(IidmXmlVersion::V1_3(), {"1.3"}) .put(IidmXmlVersion::V1_4(), {"1.4"}) + .put(IidmXmlVersion::V1_5(), {"1.5"}) .build(), stdcxx::MapBuilder() .put("1.0", "http://www.itesla_project.eu/schema/iidm/ext/terminal_mock/1_0") @@ -45,6 +46,7 @@ TerminalMockXmlSerializer::TerminalMockXmlSerializer() : .put("1.2", "http://www.powsybl.org/schema/iidm/ext/terminal_mock/1_2") .put("1.3", "http://www.powsybl.org/schema/iidm/ext/terminal_mock/1_3") .put("1.4", "http://www.powsybl.org/schema/iidm/ext/terminal_mock/1_4") + .put("1.5", "http://www.powsybl.org/schema/iidm/ext/terminal_mock/1_5") .build()) { } @@ -74,7 +76,7 @@ Extension& TerminalMockXmlSerializer::read(Extendable& extendable, NetworkXmlRea void TerminalMockXmlSerializer::write(const Extension& extension, NetworkXmlWriterContext& context) const { const auto& terminalMockExt = safeCast(extension); - TerminalRefXml::writeTerminalRef(terminalMockExt.getTerminal(), context, getNamespacePrefix(), "terminal", context.getExtensionsWriter()); + TerminalRefXml::writeTerminalRef(terminalMockExt.getTerminal(), context, getNamespacePrefix(), "terminal", context.getWriter()); } } // namespace extensions diff --git a/test/iidm/util/SVTest.cpp b/test/iidm/util/SVTest.cpp new file mode 100644 index 000000000..11261081b --- /dev/null +++ b/test/iidm/util/SVTest.cpp @@ -0,0 +1,151 @@ +/** + * 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/. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace powsybl { + +namespace iidm { + +Network createDanglingLineTestNetwork() { + Network network("test", "test"); + Substation& substation = network.newSubstation() + .setId("S1") + .setName("S1_NAME") + .setCountry(Country::FR) + .setTso("TSO") + .add(); + + VoltageLevel& vl1 = substation.newVoltageLevel() + .setId("VL1") + .setName("VL1_NAME") + .setTopologyKind(TopologyKind::BUS_BREAKER) + .setNominalV(380.0) + .setLowVoltageLimit(340.0) + .setHighVoltageLimit(420.0) + .add(); + + Bus& vl1Bus1 = vl1.getBusBreakerView().newBus() + .setId("VL1_BUS1") + .add(); + + vl1.newDanglingLine() + .setId("DL1") + .setName("DL1_NAME") + .setBus(vl1Bus1.getId()) + .setConnectableBus(vl1Bus1.getId()) + .setB(0.000193) + .setG(0.0) + .setP0(-300) + .setQ0(-100) + .setR(1.5) + .setX(16.5) + .setUcteXnodeCode("ucteXnodeCodeTest") + .add(); + + return network; +} + +BOOST_AUTO_TEST_SUITE(SVTestSuite) + +// computation are not the same for every platforms (due to complex support) +// => increase tolerance by using a threshold bigger than std::numeric_limits::epsilon() +constexpr double ACCEPTABLE_THRESHOLD = 1e-6; + +BOOST_AUTO_TEST_CASE(OtherSideTwtTest) { + Network network = powsybl::network::EurostagFactory::createTutorial1Network(); + TwoWindingsTransformer& twt = network.getTwoWindingsTransformer("NGEN_NHV1"); + Terminal& terminal1 = twt.getTerminal1(); + Bus& bus1 = terminal1.getBusBreakerView().getBus().get(); + + terminal1.setP(605.558349609375); + terminal1.setQ(225.28251647949219); + bus1.setV(24.500000610351563); + bus1.setAngle(2.3259763717651367); + SV sv(terminal1.getP(), terminal1.getQ(), bus1.getV(), bus1.getAngle()); + + const SV& otherSide = sv.otherSide(twt); + BOOST_CHECK_CLOSE(-604.89090825537278, otherSide.getP(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-197.48047051265698, otherSide.getQ(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(402.142839934194, otherSide.getU(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(5.3007050229466078e-08, otherSide.getA(), ACCEPTABLE_THRESHOLD); +} + +BOOST_AUTO_TEST_CASE(OtherSideLineTest) { + Network network = powsybl::network::EurostagFactory::createTutorial1Network(); + Line& line = network.getLine("NHV1_NHV2_1"); + Terminal& terminal1 = line.getTerminal1(); + Bus& bus1 = terminal1.getBusBreakerView().getBus().get(); + + terminal1.setP(302.44406127929688); + terminal1.setQ(98.740272521972656); + bus1.setV(402.14284515380859); + bus1.setAngle(0); + SV sv(terminal1.getP(), terminal1.getQ(), bus1.getV(), bus1.getAngle()); + + const SV& otherSide = sv.otherSide(line); + BOOST_CHECK_CLOSE(-300.26535137698056, otherSide.getP(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-137.19794660913607, otherSide.getQ(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(387.38198654517674, otherSide.getU(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-3.4951525055825536, otherSide.getA(), ACCEPTABLE_THRESHOLD); +} + +BOOST_AUTO_TEST_CASE(OtherSideDanglingLineTest) { + Network network = createDanglingLineTestNetwork(); + DanglingLine& dl = network.getDanglingLine("DL1"); + Terminal& terminal1 = dl.getTerminal(); + Bus& bus1 = terminal1.getBusBreakerView().getBus().get(); + + terminal1.setP(302.44406127929688); + terminal1.setQ(98.740272521972656); + bus1.setV(402.14284515380859); + bus1.setAngle(0); + SV sv(terminal1.getP(), terminal1.getQ(), bus1.getV(), bus1.getAngle()); + + const SV& otherSide = sv.otherSide(dl); + BOOST_CHECK_CLOSE(-301.47434650169686, otherSide.getP(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-118.85058330380885, otherSide.getQ(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(396.50418762074077, otherSide.getU(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-1.7318099978500625, otherSide.getA(), ACCEPTABLE_THRESHOLD); +} + +BOOST_AUTO_TEST_CASE(OtherSideY1Y2) { + Network network = powsybl::network::EurostagFactory::createTutorial1Network(); + Line& line = network.getLine("NHV1_NHV2_1"); + Terminal& terminal1 = line.getTerminal1(); + Bus& bus1 = terminal1.getBusBreakerView().getBus().get(); + + terminal1.setP(302.44406127929688); + terminal1.setQ(98.740272521972656); + bus1.setV(402.14284515380859); + bus1.setAngle(0); + SV sv(terminal1.getP(), terminal1.getQ(), bus1.getV(), bus1.getAngle()); + + const SV& otherSide = sv.otherSideY1Y2(line); + BOOST_CHECK_CLOSE(-300.43390740755751, otherSide.getP(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-137.18849721702034, otherSide.getQ(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(389.95267268210063, otherSide.getU(), ACCEPTABLE_THRESHOLD); + BOOST_CHECK_CLOSE(-3.5063579035161601, otherSide.getA(), ACCEPTABLE_THRESHOLD); +} + +BOOST_AUTO_TEST_SUITE_END() + +} // namespace iidm + +} // namespace powsybl diff --git a/test/resources/V1_0/tieline.xml b/test/resources/V1_0/tieline.xml index 533e2fa7e..014a4a4d8 100644 --- a/test/resources/V1_0/tieline.xml +++ b/test/resources/V1_0/tieline.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_0/tieline.xml.macos b/test/resources/V1_0/tieline.xml.macos new file mode 100644 index 000000000..5c07e8171 --- /dev/null +++ b/test/resources/V1_0/tieline.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_0/tielineFictitious.xml b/test/resources/V1_0/tielineFictitious.xml index 533e2fa7e..014a4a4d8 100644 --- a/test/resources/V1_0/tielineFictitious.xml +++ b/test/resources/V1_0/tielineFictitious.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_0/tielineFictitious.xml.macos b/test/resources/V1_0/tielineFictitious.xml.macos new file mode 100644 index 000000000..5c07e8171 --- /dev/null +++ b/test/resources/V1_0/tielineFictitious.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_1/tieline.xml b/test/resources/V1_1/tieline.xml index f2d551ab1..ffb3240c7 100644 --- a/test/resources/V1_1/tieline.xml +++ b/test/resources/V1_1/tieline.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_1/tieline.xml.macos b/test/resources/V1_1/tieline.xml.macos new file mode 100644 index 000000000..0dd1b4454 --- /dev/null +++ b/test/resources/V1_1/tieline.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_1/tielineFictitious.xml b/test/resources/V1_1/tielineFictitious.xml index f2d551ab1..ffb3240c7 100644 --- a/test/resources/V1_1/tielineFictitious.xml +++ b/test/resources/V1_1/tielineFictitious.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_1/tielineFictitious.xml.macos b/test/resources/V1_1/tielineFictitious.xml.macos new file mode 100644 index 000000000..0dd1b4454 --- /dev/null +++ b/test/resources/V1_1/tielineFictitious.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_2/tieline.xml b/test/resources/V1_2/tieline.xml index 802588617..32f5620ba 100644 --- a/test/resources/V1_2/tieline.xml +++ b/test/resources/V1_2/tieline.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_2/tieline.xml.macos b/test/resources/V1_2/tieline.xml.macos new file mode 100644 index 000000000..6ff3f645e --- /dev/null +++ b/test/resources/V1_2/tieline.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_2/tielineFictitious.xml b/test/resources/V1_2/tielineFictitious.xml index 802588617..32f5620ba 100644 --- a/test/resources/V1_2/tielineFictitious.xml +++ b/test/resources/V1_2/tielineFictitious.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_2/tielineFictitious.xml.macos b/test/resources/V1_2/tielineFictitious.xml.macos new file mode 100644 index 000000000..6ff3f645e --- /dev/null +++ b/test/resources/V1_2/tielineFictitious.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_3/tieline.xml b/test/resources/V1_3/tieline.xml index 79fb53e8c..28975d99c 100644 --- a/test/resources/V1_3/tieline.xml +++ b/test/resources/V1_3/tieline.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_3/tieline.xml.macos b/test/resources/V1_3/tieline.xml.macos new file mode 100644 index 000000000..c33f21b93 --- /dev/null +++ b/test/resources/V1_3/tieline.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_3/tielineFictitious.xml b/test/resources/V1_3/tielineFictitious.xml index eb4ab0623..392fe44ea 100644 --- a/test/resources/V1_3/tielineFictitious.xml +++ b/test/resources/V1_3/tielineFictitious.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_3/tielineFictitious.xml.macos b/test/resources/V1_3/tielineFictitious.xml.macos new file mode 100644 index 000000000..c33f21b93 --- /dev/null +++ b/test/resources/V1_3/tielineFictitious.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_3/tielineWithAliases.xml b/test/resources/V1_3/tielineWithAliases.xml index 2706af7f4..bc5ad225d 100644 --- a/test/resources/V1_3/tielineWithAliases.xml +++ b/test/resources/V1_3/tielineWithAliases.xml @@ -37,9 +37,9 @@ - + Alias Other alias - + diff --git a/test/resources/V1_3/tielineWithAliases.xml.macos b/test/resources/V1_3/tielineWithAliases.xml.macos new file mode 100644 index 000000000..3c0232a45 --- /dev/null +++ b/test/resources/V1_3/tielineWithAliases.xml.macos @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alias + Other alias + + + diff --git a/test/resources/V1_4/tieline.xml b/test/resources/V1_4/tieline.xml index 8f963a697..f9a80a5db 100644 --- a/test/resources/V1_4/tieline.xml +++ b/test/resources/V1_4/tieline.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_4/tieline.xml.macos b/test/resources/V1_4/tieline.xml.macos new file mode 100644 index 000000000..d3b49b730 --- /dev/null +++ b/test/resources/V1_4/tieline.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_4/tielineFictitious.xml b/test/resources/V1_4/tielineFictitious.xml index e04ea41ca..479427b48 100644 --- a/test/resources/V1_4/tielineFictitious.xml +++ b/test/resources/V1_4/tielineFictitious.xml @@ -37,6 +37,6 @@ - - + + diff --git a/test/resources/V1_4/tielineFictitious.xml.macos b/test/resources/V1_4/tielineFictitious.xml.macos new file mode 100644 index 000000000..d3b49b730 --- /dev/null +++ b/test/resources/V1_4/tielineFictitious.xml.macos @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_4/tielineWithAliases.xml b/test/resources/V1_4/tielineWithAliases.xml index beb4ca27e..a84f362a6 100644 --- a/test/resources/V1_4/tielineWithAliases.xml +++ b/test/resources/V1_4/tielineWithAliases.xml @@ -37,9 +37,9 @@ - + Alias Other alias - + diff --git a/test/resources/V1_4/tielineWithAliases.xml.macos b/test/resources/V1_4/tielineWithAliases.xml.macos new file mode 100644 index 000000000..0d0820b57 --- /dev/null +++ b/test/resources/V1_4/tielineWithAliases.xml.macos @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alias + Other alias + + + diff --git a/test/resources/V1_5/LccRoundTripRef.xml b/test/resources/V1_5/LccRoundTripRef.xml new file mode 100644 index 000000000..8242bcd5f --- /dev/null +++ b/test/resources/V1_5/LccRoundTripRef.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/VscRoundTripRef.xml b/test/resources/V1_5/VscRoundTripRef.xml new file mode 100644 index 000000000..d2fca89d7 --- /dev/null +++ b/test/resources/V1_5/VscRoundTripRef.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/batteryRoundTripRef.xml b/test/resources/V1_5/batteryRoundTripRef.xml new file mode 100644 index 000000000..6abe91fe4 --- /dev/null +++ b/test/resources/V1_5/batteryRoundTripRef.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/completeThreeWindingsTransformerRoundTripRef.xml b/test/resources/V1_5/completeThreeWindingsTransformerRoundTripRef.xml new file mode 100644 index 000000000..3ee8c07e5 --- /dev/null +++ b/test/resources/V1_5/completeThreeWindingsTransformerRoundTripRef.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/danglingLine.xml b/test/resources/V1_5/danglingLine.xml new file mode 100644 index 000000000..89490b29b --- /dev/null +++ b/test/resources/V1_5/danglingLine.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/danglingLineWithGeneration.xml b/test/resources/V1_5/danglingLineWithGeneration.xml new file mode 100644 index 000000000..6bc43ccda --- /dev/null +++ b/test/resources/V1_5/danglingLineWithGeneration.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-properties.xml b/test/resources/V1_5/eurostag-tutorial-example1-properties.xml new file mode 100644 index 000000000..addb5a415 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-properties.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-terminalMock.xml b/test/resources/V1_5/eurostag-tutorial-example1-terminalMock.xml new file mode 100644 index 000000000..051a2a556 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-terminalMock.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadMockExt.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadMockExt.xml new file mode 100644 index 000000000..1f829d92c --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadMockExt.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadQuxExt.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadQuxExt.xml new file mode 100644 index 000000000..9523d74c6 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-bad-loadQuxExt.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_1.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_1.xml new file mode 100644 index 000000000..b95b529c6 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_1.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_2.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_2.xml new file mode 100644 index 000000000..099a2a0c6 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_2.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_3.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_3.xml new file mode 100644 index 000000000..5b41ab22a --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-loadMockExt-1_3.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1-with-terminalMock-ext.xml b/test/resources/V1_5/eurostag-tutorial-example1-with-terminalMock-ext.xml new file mode 100644 index 000000000..11f73ba31 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1-with-terminalMock-ext.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial-example1.xml b/test/resources/V1_5/eurostag-tutorial-example1.xml new file mode 100644 index 000000000..7acc8b721 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial-example1.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/eurostag-tutorial1-lf.xml b/test/resources/V1_5/eurostag-tutorial1-lf.xml new file mode 100644 index 000000000..6291f6f84 --- /dev/null +++ b/test/resources/V1_5/eurostag-tutorial1-lf.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/fictitiousSwitchRef-bbk.xml b/test/resources/V1_5/fictitiousSwitchRef-bbk.xml new file mode 100644 index 000000000..e520bf58e --- /dev/null +++ b/test/resources/V1_5/fictitiousSwitchRef-bbk.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/fictitiousSwitchRef-bbr.xml b/test/resources/V1_5/fictitiousSwitchRef-bbr.xml new file mode 100644 index 000000000..58486e8af --- /dev/null +++ b/test/resources/V1_5/fictitiousSwitchRef-bbr.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/fictitiousSwitchRef.xml b/test/resources/V1_5/fictitiousSwitchRef.xml new file mode 100644 index 000000000..77738e69a --- /dev/null +++ b/test/resources/V1_5/fictitiousSwitchRef.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/fourSubstationsNbk.xml b/test/resources/V1_5/fourSubstationsNbk.xml new file mode 100644 index 000000000..80f56069e --- /dev/null +++ b/test/resources/V1_5/fourSubstationsNbk.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/internalConnections.xml b/test/resources/V1_5/internalConnections.xml new file mode 100644 index 000000000..cc3b3329a --- /dev/null +++ b/test/resources/V1_5/internalConnections.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/loadDetailRef.xml b/test/resources/V1_5/loadDetailRef.xml new file mode 100644 index 000000000..0af74498c --- /dev/null +++ b/test/resources/V1_5/loadDetailRef.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/multiple-extensions.xml b/test/resources/V1_5/multiple-extensions.xml new file mode 100644 index 000000000..6b304a533 --- /dev/null +++ b/test/resources/V1_5/multiple-extensions.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/nonLinearShuntRoundTripRef.xml b/test/resources/V1_5/nonLinearShuntRoundTripRef.xml new file mode 100644 index 000000000..e83387881 --- /dev/null +++ b/test/resources/V1_5/nonLinearShuntRoundTripRef.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/optionalLoadTypeBug.xml b/test/resources/V1_5/optionalLoadTypeBug.xml new file mode 100644 index 000000000..fe70027d6 --- /dev/null +++ b/test/resources/V1_5/optionalLoadTypeBug.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/test/resources/V1_5/phaseShifterRoundTripRef.xml b/test/resources/V1_5/phaseShifterRoundTripRef.xml new file mode 100644 index 000000000..71e1e4f0f --- /dev/null +++ b/test/resources/V1_5/phaseShifterRoundTripRef.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/reactiveLimitsRoundTripRef.xml b/test/resources/V1_5/reactiveLimitsRoundTripRef.xml new file mode 100644 index 000000000..7d8e535e4 --- /dev/null +++ b/test/resources/V1_5/reactiveLimitsRoundTripRef.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/regulatingStaticVarCompensatorRoundTripRef.xml b/test/resources/V1_5/regulatingStaticVarCompensatorRoundTripRef.xml new file mode 100644 index 000000000..2f14899b7 --- /dev/null +++ b/test/resources/V1_5/regulatingStaticVarCompensatorRoundTripRef.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/regulatingTerminal.xml b/test/resources/V1_5/regulatingTerminal.xml new file mode 100644 index 000000000..b45ff6dc2 --- /dev/null +++ b/test/resources/V1_5/regulatingTerminal.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/shuntRoundTripRef.xml b/test/resources/V1_5/shuntRoundTripRef.xml new file mode 100644 index 000000000..5fe3d0834 --- /dev/null +++ b/test/resources/V1_5/shuntRoundTripRef.xml @@ -0,0 +1,24 @@ + + + + + + + + + Alias + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/staticVarCompensatorRoundTripRef.xml b/test/resources/V1_5/staticVarCompensatorRoundTripRef.xml new file mode 100644 index 000000000..7210b1220 --- /dev/null +++ b/test/resources/V1_5/staticVarCompensatorRoundTripRef.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/terminalRef.xml b/test/resources/V1_5/terminalRef.xml new file mode 100644 index 000000000..d3e067e96 --- /dev/null +++ b/test/resources/V1_5/terminalRef.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/threeWindingsTransformerRoundTripRef.xml b/test/resources/V1_5/threeWindingsTransformerRoundTripRef.xml new file mode 100644 index 000000000..1cd3dd770 --- /dev/null +++ b/test/resources/V1_5/threeWindingsTransformerRoundTripRef.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/tieline.xml b/test/resources/V1_5/tieline.xml new file mode 100644 index 000000000..fc2f94cdb --- /dev/null +++ b/test/resources/V1_5/tieline.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/tielineFictitious.xml b/test/resources/V1_5/tielineFictitious.xml new file mode 100644 index 000000000..57100c5b2 --- /dev/null +++ b/test/resources/V1_5/tielineFictitious.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/resources/V1_5/tielineWithAliases.xml b/test/resources/V1_5/tielineWithAliases.xml new file mode 100644 index 000000000..c7409b3b9 --- /dev/null +++ b/test/resources/V1_5/tielineWithAliases.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Alias + Other alias + + +