From a329f5ead5831332c70a31c6c5beb3d5fc4345f1 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Fri, 25 Feb 2022 15:25:42 +0100 Subject: [PATCH 1/2] Add a test that crashes for #4544 --- src/model/test/CoilCoolingDX_GTest.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/model/test/CoilCoolingDX_GTest.cpp b/src/model/test/CoilCoolingDX_GTest.cpp index 02e72def85e..473b9975257 100644 --- a/src/model/test/CoilCoolingDX_GTest.cpp +++ b/src/model/test/CoilCoolingDX_GTest.cpp @@ -372,3 +372,29 @@ TEST_F(ModelFixture, CoilCoolingDX_cloneParent) { EXPECT_EQ(dx, unitary.coolingCoil().get()); EXPECT_NE(dx, unitaryClone.coolingCoil().get()); } + +TEST_F(ModelFixture, CoilCoolingDX_cloneOtherModel) { + Model model; + + CoilCoolingDXCurveFitOperatingMode operatingMode(model); + CoilCoolingDXCurveFitPerformance performance(model, operatingMode); + CoilCoolingDX dx(model, performance); + + EXPECT_EQ(performance, dx.performanceObject()); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + + Model model2; + auto dxClone = dx.clone(model2).cast(); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model.getConcreteModelObjects().size()); + + EXPECT_EQ(1u, model2.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model2.getConcreteModelObjects().size()); + EXPECT_EQ(1u, model2.getConcreteModelObjects().size()); + + EXPECT_EQ(performance, dx.performanceObject()); + EXPECT_NE(performance, dxClone.performanceObject()); +} From c19e317bcc403b9a49ee0d953c13164ef756d764 Mon Sep 17 00:00:00 2001 From: Julien Marrec Date: Thu, 14 Apr 2022 13:27:33 +0200 Subject: [PATCH 2/2] The real issue is that we define resource objects as children --- src/model/CoilCoolingDX.cpp | 2 +- src/model/CoilCoolingDXCurveFitOperatingMode.cpp | 4 ++-- src/model/CoilCoolingDXCurveFitPerformance.cpp | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/model/CoilCoolingDX.cpp b/src/model/CoilCoolingDX.cpp index 8c763cb7072..1ab0657307b 100644 --- a/src/model/CoilCoolingDX.cpp +++ b/src/model/CoilCoolingDX.cpp @@ -133,7 +133,7 @@ namespace model { std::vector result; // This is a ResourceObject, so it shouldn't really be a child except for OS App / IG - result.push_back(performanceObject()); + // result.push_back(performanceObject()); std::vector myAFNItems = getObject().getModelObjectSources(AirflowNetworkEquivalentDuct::iddObjectType()); diff --git a/src/model/CoilCoolingDXCurveFitOperatingMode.cpp b/src/model/CoilCoolingDXCurveFitOperatingMode.cpp index a6d485d5faa..b2463939595 100644 --- a/src/model/CoilCoolingDXCurveFitOperatingMode.cpp +++ b/src/model/CoilCoolingDXCurveFitOperatingMode.cpp @@ -85,8 +85,8 @@ namespace model { std::vector CoilCoolingDXCurveFitOperatingMode_Impl::children() const { // These are ResourceObjects, so they shouldn't really be children except for OS App / IG - std::vector result = subsetCastVector(speeds()); - + // std::vector result = subsetCastVector(speeds()); + std::vector result; return result; } diff --git a/src/model/CoilCoolingDXCurveFitPerformance.cpp b/src/model/CoilCoolingDXCurveFitPerformance.cpp index 7ba0f802f65..8d225e88527 100644 --- a/src/model/CoilCoolingDXCurveFitPerformance.cpp +++ b/src/model/CoilCoolingDXCurveFitPerformance.cpp @@ -98,13 +98,13 @@ namespace model { std::vector result; // These are ResourceObjects, so they shouldn't really be children except for OS App / IG - result.push_back(baseOperatingMode()); - if (auto _mode = alternativeOperatingMode1()) { - result.push_back(_mode.get()); - } - if (auto _mode = alternativeOperatingMode2()) { - result.push_back(_mode.get()); - } + // result.push_back(baseOperatingMode()); + // if (auto _mode = alternativeOperatingMode1()) { + // result.push_back(_mode.get()); + // } + // if (auto _mode = alternativeOperatingMode2()) { + // result.push_back(_mode.get()); + // } return result; }