fixed MR comments. Brought back a testable assertion feature. Added a test to test that assertion

release/4.3a0
Kartik Arcot 2023-01-21 13:11:40 -08:00
parent 3cdbebbf63
commit 9847eea40c
5 changed files with 29 additions and 5 deletions

View File

@ -20,6 +20,7 @@
#include <gtsam/base/Testable.h> #include <gtsam/base/Testable.h>
#include <gtsam/global_includes.h> #include <gtsam/global_includes.h>
#include <functional>
#include <optional> #include <optional>
#include <map> #include <map>
#include <iostream> #include <iostream>
@ -71,6 +72,15 @@ bool assert_equal(const V& expected, const std::optional<V>& actual, double tol
return assert_equal(expected, *actual, tol); return assert_equal(expected, *actual, tol);
} }
template<class V>
bool assert_equal(const V& expected,
const std::optional<std::reference_wrapper<const V>>& actual, double tol = 1e-9) {
if (!actual) {
std::cout << "actual is std::nullopt" << std::endl;
return false;
}
return assert_equal(expected, *actual.get(), tol);
}
/** /**
* Function for comparing maps of testable->testable * Function for comparing maps of testable->testable

View File

@ -23,6 +23,8 @@
#include <boost/tuple/tuple.hpp> #include <boost/tuple/tuple.hpp>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <optional>
#include <functional>
using namespace std; using namespace std;
using namespace gtsam; using namespace gtsam;
@ -1176,6 +1178,17 @@ TEST(Matrix, AbsoluteError) {
EXPECT(isEqual); EXPECT(isEqual);
} }
// A test to check if a matrix and an optional reference_wrapper to
// a matrix are equal.
TEST(Matrix, MatrixRef) {
Matrix A = Matrix::Random(3, 3);
Matrix B = Matrix::Random(3, 3);
EXPECT(assert_equal(A, A));
EXPECT(assert_equal(A, std::cref(A)));
EXPECT(!assert_equal(A, std::cref(B)));
}
/* ************************************************************************* */ /* ************************************************************************* */
int main() { int main() {
TestResult tr; TestResult tr;

View File

@ -37,16 +37,16 @@ struct ISAM2UpdateParams {
/** An optional map of keys to group labels, such that a variable can be /** An optional map of keys to group labels, such that a variable can be
* constrained to a particular grouping in the BayesTree */ * constrained to a particular grouping in the BayesTree */
std::optional<FastMap<Key, int>> constrainedKeys{std::nullopt}; std::optional<FastMap<Key, int>> constrainedKeys;
/** An optional set of nonlinear keys that iSAM2 will hold at a constant /** An optional set of nonlinear keys that iSAM2 will hold at a constant
* linearization point, regardless of the size of the linear delta */ * linearization point, regardless of the size of the linear delta */
std::optional<FastList<Key>> noRelinKeys{std::nullopt}; std::optional<FastList<Key>> noRelinKeys;
/** An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless /** An optional set of nonlinear keys that iSAM2 will re-eliminate, regardless
* of the size of the linear delta. This allows the provided keys to be * of the size of the linear delta. This allows the provided keys to be
* reordered. */ * reordered. */
std::optional<FastList<Key>> extraReelimKeys{std::nullopt}; std::optional<FastList<Key>> extraReelimKeys;
/** Relinearize any variables whose delta magnitude is sufficiently large /** Relinearize any variables whose delta magnitude is sufficiently large
* (Params::relinearizeThreshold), regardless of the relinearization * (Params::relinearizeThreshold), regardless of the relinearization
@ -63,7 +63,7 @@ struct ISAM2UpdateParams {
* depend on Keys `X(2)`, `X(3)`. Next call to ISAM2::update() must include * depend on Keys `X(2)`, `X(3)`. Next call to ISAM2::update() must include
* its `newAffectedKeys` field with the map `13 -> {X(2), X(3)}`. * its `newAffectedKeys` field with the map `13 -> {X(2), X(3)}`.
*/ */
std::optional<FastMap<FactorIndex, KeySet>> newAffectedKeys{std::nullopt}; std::optional<FastMap<FactorIndex, KeySet>> newAffectedKeys;
/** By default, iSAM2 uses a wildfire update scheme that stops updating when /** By default, iSAM2 uses a wildfire update scheme that stops updating when
* the deltas become too small down in the tree. This flagg forces a full * the deltas become too small down in the tree. This flagg forces a full

View File

@ -21,7 +21,6 @@
#pragma once #pragma once
#include <cstddef>
#include <gtsam/geometry/Point2.h> #include <gtsam/geometry/Point2.h>
#include <gtsam/nonlinear/NonlinearFactor.h> #include <gtsam/nonlinear/NonlinearFactor.h>
#include <gtsam/nonlinear/GraphvizFormatting.h> #include <gtsam/nonlinear/GraphvizFormatting.h>

View File

@ -23,7 +23,9 @@
#include <gtsam/linear/GaussianFactorGraph.h> #include <gtsam/linear/GaussianFactorGraph.h>
#include <gtsam/linear/SubgraphSolver.h> #include <gtsam/linear/SubgraphSolver.h>
#include <string> #include <string>
#include <optional>
namespace gtsam { namespace gtsam {