diff --git a/gtsam/hybrid/HybridConditional.cpp b/gtsam/hybrid/HybridConditional.cpp index 8371a3365..0bfcfec4d 100644 --- a/gtsam/hybrid/HybridConditional.cpp +++ b/gtsam/hybrid/HybridConditional.cpp @@ -116,7 +116,6 @@ bool HybridConditional::equals(const HybridFactor &other, double tol) const { auto other = e->asDiscrete(); return other != nullptr && dc->equals(*other, tol); } - return inner_->equals(*(e->inner_), tol); return inner_ ? (e->inner_ ? inner_->equals(*(e->inner_), tol) : false) : !(e->inner_); diff --git a/gtsam/hybrid/tests/testSerializationHybrid.cpp b/gtsam/hybrid/tests/testSerializationHybrid.cpp index 5337938dd..9597fe8f0 100644 --- a/gtsam/hybrid/tests/testSerializationHybrid.cpp +++ b/gtsam/hybrid/tests/testSerializationHybrid.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -105,6 +106,20 @@ TEST(HybridSerialization, GaussianMixtureFactor) { EXPECT(equalsBinary(factor)); } +/* ****************************************************************************/ +// Test HybridConditional serialization. +TEST(HybridSerialization, HybridConditional) { + const DiscreteKey mode(M(0), 2); + Matrix1 I = Matrix1::Identity(); + const auto conditional = boost::make_shared( + GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5)); + const HybridConditional hc(conditional); + + EXPECT(equalsObj(hc)); + EXPECT(equalsXML(hc)); + EXPECT(equalsBinary(hc)); +} + /* ****************************************************************************/ // Test GaussianMixture serialization. TEST(HybridSerialization, GaussianMixture) {