diff --git a/src/parser.cpp b/src/parser.cpp index 7728f4ccd6..3060c83f98 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1240,12 +1240,6 @@ void Parser::ParserImpl::loadConnection(const ModelPtr &model, const XmlNodePtr mapVariablesFound = true; if (!variable1Missing && !variable2Missing) { - if (variable1Name > variable2Name) { - std::string tmp = variable1Name; - variable1Name = variable2Name; - variable2Name = tmp; - } - auto variableNamePair = std::make_pair(variable1Name, variable2Name); NamePairList::const_iterator it = std::find_if(usedMapVariables.begin(), usedMapVariables.end(), diff --git a/tests/connection/connection.cpp b/tests/connection/connection.cpp index 4789fe4b7f..76fda64dd6 100644 --- a/tests/connection/connection.cpp +++ b/tests/connection/connection.cpp @@ -1435,7 +1435,7 @@ TEST(Connection, repeatedMapVariables) const std::vector expectedIssues = { "Connection in model 'connection' between 'variable1' and 'variable2' is not unique.", - "Connection in model 'connection' between 'variable3' and 'variable6' is not unique.", + "Connection in model 'connection' between 'variable6' and 'variable3' is not unique.", }; EXPECT_EQ_ISSUES(expectedIssues, p); @@ -1535,3 +1535,56 @@ TEST(Connection, addEquivalenceConnectionIdClearedAfterDisconnect) libcellml::Variable::addEquivalence(v1, v2); EXPECT_EQ("", libcellml::Variable::equivalenceConnectionId(v1, v2)); } + +TEST(Connection, twoWayConnectionFromCellML1) +{ + auto p = libcellml::Parser::create(false); + auto m = p->parseModel(fileContents("cellml1X/connections.cellml")); + + EXPECT_EQ(size_t(0), p->errorCount()); +} + +TEST(Connection, sameNamedVariablesInDifferentComponents) +{ + auto m = libcellml::Model::create("m"); + auto c1 = libcellml::Component::create("c1"); + auto c2 = libcellml::Component::create("c2"); + auto v1c1 = libcellml::Variable::create("v1"); + auto v2c1 = libcellml::Variable::create("v2"); + auto v1c2 = libcellml::Variable::create("v1"); + auto v2c2 = libcellml::Variable::create("v2"); + + m->addComponent(c1); + m->addComponent(c2); + + c1->addVariable(v1c1); + c1->addVariable(v2c1); + c2->addVariable(v1c2); + c2->addVariable(v2c2); + + v1c1->setUnits("dimensionless"); + v1c1->setInterfaceType("public"); + v2c1->setUnits("dimensionless"); + v2c1->setInterfaceType("public"); + v1c2->setUnits("dimensionless"); + v1c2->setInterfaceType("public"); + v2c2->setUnits("dimensionless"); + v2c2->setInterfaceType("public"); + + libcellml::Variable::addEquivalence(v1c1, v2c2); + libcellml::Variable::addEquivalence(v2c1, v1c2); + + auto v = libcellml::Validator::create(); + v->validateModel(m); + + EXPECT_EQ(size_t(0), v->issueCount()); + + auto printer = libcellml::Printer::create(); + + auto modelString = printer->printModel(m); + + auto p = libcellml::Parser::create(); + p->parseModel(modelString); + + EXPECT_EQ(size_t(0), p->issueCount()); +} diff --git a/tests/resources/cellml1X/connections.cellml b/tests/resources/cellml1X/connections.cellml new file mode 100644 index 0000000000..a8b5d2118f --- /dev/null +++ b/tests/resources/cellml1X/connections.cellml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +