fix minor bug in HybridConditional and test its serialization

release/4.3a0
Varun Agrawal 2023-01-03 17:40:04 -05:00
parent 74142e4be1
commit 2bb4fd6530
2 changed files with 15 additions and 1 deletions

View File

@ -116,7 +116,6 @@ bool HybridConditional::equals(const HybridFactor &other, double tol) const {
auto other = e->asDiscrete(); auto other = e->asDiscrete();
return other != nullptr && dc->equals(*other, tol); return other != nullptr && dc->equals(*other, tol);
} }
return inner_->equals(*(e->inner_), tol);
return inner_ ? (e->inner_ ? inner_->equals(*(e->inner_), tol) : false) return inner_ ? (e->inner_ ? inner_->equals(*(e->inner_), tol) : false)
: !(e->inner_); : !(e->inner_);

View File

@ -19,6 +19,7 @@
#include <gtsam/base/serializationTestHelpers.h> #include <gtsam/base/serializationTestHelpers.h>
#include <gtsam/hybrid/GaussianMixture.h> #include <gtsam/hybrid/GaussianMixture.h>
#include <gtsam/hybrid/GaussianMixtureFactor.h> #include <gtsam/hybrid/GaussianMixtureFactor.h>
#include <gtsam/hybrid/HybridConditional.h>
#include <gtsam/hybrid/HybridDiscreteFactor.h> #include <gtsam/hybrid/HybridDiscreteFactor.h>
#include <gtsam/hybrid/HybridGaussianFactor.h> #include <gtsam/hybrid/HybridGaussianFactor.h>
#include <gtsam/inference/Symbol.h> #include <gtsam/inference/Symbol.h>
@ -105,6 +106,20 @@ TEST(HybridSerialization, GaussianMixtureFactor) {
EXPECT(equalsBinary<GaussianMixtureFactor>(factor)); EXPECT(equalsBinary<GaussianMixtureFactor>(factor));
} }
/* ****************************************************************************/
// Test HybridConditional serialization.
TEST(HybridSerialization, HybridConditional) {
const DiscreteKey mode(M(0), 2);
Matrix1 I = Matrix1::Identity();
const auto conditional = boost::make_shared<GaussianConditional>(
GaussianConditional::FromMeanAndStddev(Z(0), I, X(0), Vector1(0), 0.5));
const HybridConditional hc(conditional);
EXPECT(equalsObj<HybridConditional>(hc));
EXPECT(equalsXML<HybridConditional>(hc));
EXPECT(equalsBinary<HybridConditional>(hc));
}
/* ****************************************************************************/ /* ****************************************************************************/
// Test GaussianMixture serialization. // Test GaussianMixture serialization.
TEST(HybridSerialization, GaussianMixture) { TEST(HybridSerialization, GaussianMixture) {