From 6b14e652ffea93cf3f49b5a15cd7207e9685613e Mon Sep 17 00:00:00 2001 From: Alex Cunningham Date: Mon, 27 Aug 2012 01:40:11 +0000 Subject: [PATCH] Fixed bug in equality check --- gtsam_unstable/nonlinear/LinearContainerFactor.cpp | 6 ++++-- .../nonlinear/tests/testLinearContainerFactor.cpp | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gtsam_unstable/nonlinear/LinearContainerFactor.cpp b/gtsam_unstable/nonlinear/LinearContainerFactor.cpp index 048f4a0c4..fa44d3e93 100644 --- a/gtsam_unstable/nonlinear/LinearContainerFactor.cpp +++ b/gtsam_unstable/nonlinear/LinearContainerFactor.cpp @@ -117,11 +117,13 @@ void LinearContainerFactor::print(const std::string& s, const KeyFormatter& keyF /* ************************************************************************* */ bool LinearContainerFactor::equals(const NonlinearFactor& f, double tol) const { const LinearContainerFactor* jcf = dynamic_cast(&f); - if (!jcf || factor_->equals(*jcf->factor_, tol) || NonlinearFactor::equals(f)) + if (!jcf || !factor_->equals(*jcf->factor_, tol) || !NonlinearFactor::equals(f)) return false; if (!linearizationPoint_ && !jcf->linearizationPoint_) return true; - return jcf->linearizationPoint_ && linearizationPoint_->equals(*jcf->linearizationPoint_, tol); + if (linearizationPoint_ && jcf->linearizationPoint_) + return linearizationPoint_->equals(*jcf->linearizationPoint_, tol); + return false; } /* ************************************************************************* */ diff --git a/gtsam_unstable/nonlinear/tests/testLinearContainerFactor.cpp b/gtsam_unstable/nonlinear/tests/testLinearContainerFactor.cpp index 1bce66ce3..51f2f73a2 100644 --- a/gtsam_unstable/nonlinear/tests/testLinearContainerFactor.cpp +++ b/gtsam_unstable/nonlinear/tests/testLinearContainerFactor.cpp @@ -9,6 +9,7 @@ #include +#include #include using namespace gtsam; @@ -95,6 +96,11 @@ TEST( testLinearContainerFactor, jacobian_factor_withlinpoints ) { values.insert(x2, poseA2); LinearContainerFactor actFactor(expLinFactor, ordering, values); + LinearContainerFactor actFactorNolin(expLinFactor, ordering); + + EXPECT(assert_equal(actFactor, actFactor, tol)); + EXPECT(assert_inequal(actFactor, actFactorNolin, tol)); + EXPECT(assert_inequal(actFactorNolin, actFactor, tol)); // Check contents Values expLinPoint;