From a283938b47e26de4f757b3663dd678fbf1a1a233 Mon Sep 17 00:00:00 2001 From: Frank Dellaert Date: Tue, 16 Feb 2016 10:23:02 -0800 Subject: [PATCH] A minimal traits example --- tests/testNonlinearOptimizer.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tests/testNonlinearOptimizer.cpp b/tests/testNonlinearOptimizer.cpp index f927f45ae..f6cdd6ee5 100644 --- a/tests/testNonlinearOptimizer.cpp +++ b/tests/testNonlinearOptimizer.cpp @@ -462,6 +462,35 @@ TEST( NonlinearOptimizer, logfile ) // EXPECT(actual.str()==expected.str()); } +/* ************************************************************************* */ +// Minimal traits example +struct MyType : public Vector3 { + using Vector3::Vector3; +}; + +namespace gtsam { +template <> +struct traits { + static bool Equals(const MyType&, const MyType&, double tol) {return true;} + static void Print(const MyType&, const string&) {} + static int GetDimension(const MyType&) { return 3;} + static MyType Retract(const MyType&, const Vector3&) {return MyType();} + static Vector3 Local(const MyType&, const MyType&) {return Vector3();} +}; +} + +TEST(NonlinearOptimizer, Traits) { + NonlinearFactorGraph fg; + fg += PriorFactor(0, MyType(0, 0, 0), noiseModel::Isotropic::Sigma(3, 1)); + + Values init; + init.insert(0, MyType(0,0,0)); + + LevenbergMarquardtOptimizer optimizer(fg, init); + Values actual = optimizer.optimize(); + EXPECT(assert_equal(init, actual)); +} + /* ************************************************************************* */ int main() { TestResult tr;