From b19132e0044c3e7de2ed383cebb7ecb3a8ec26bc Mon Sep 17 00:00:00 2001 From: dellaert Date: Thu, 18 Sep 2014 17:10:39 -0500 Subject: [PATCH] First version of test, with vector of Matrices --- .cproject | 16 +++- gtsam_unstable/base/tests/testBAD.cpp | 124 ++++++++++++++++++++++++++ 2 files changed, 136 insertions(+), 4 deletions(-) create mode 100644 gtsam_unstable/base/tests/testBAD.cpp diff --git a/.cproject b/.cproject index 21ac9d913..42dbff570 100644 --- a/.cproject +++ b/.cproject @@ -784,18 +784,18 @@ true true - + make -j5 - testGaussianFactorGraph.run + testGaussianFactorGraphUnordered.run true true true - + make -j5 - testGaussianBayesNet.run + testGaussianBayesNetUnordered.run true true true @@ -1415,6 +1415,14 @@ true true + + make + -j5 + testBAD.run + true + true + true + make -j5 diff --git a/gtsam_unstable/base/tests/testBAD.cpp b/gtsam_unstable/base/tests/testBAD.cpp new file mode 100644 index 000000000..c8b9c4b9c --- /dev/null +++ b/gtsam_unstable/base/tests/testBAD.cpp @@ -0,0 +1,124 @@ +/* ---------------------------------------------------------------------------- + + * GTSAM Copyright 2010, Georgia Tech Research Corporation, + * Atlanta, Georgia 30332-0415 + * All Rights Reserved + * Authors: Frank Dellaert, et al. (see THANKS for the full author list) + + * See LICENSE for the license information + + * -------------------------------------------------------------------------- */ + +/** + * @file testBAD.cpp + * @date September 18, 2014 + * @author Frank Dellaert + * @brief unit tests for Block Automatic Differentiation + */ + +#include +#include +#include +#include + +#include + +using namespace std; +using namespace gtsam; + +/// This class might have to become a class hierarchy ? +template +class Expression { + +public: + + /// Constructor with a single key + Expression(Key key) { + } + + /// Constructor with a value, yielding a constant + Expression(const T& t) { + } +}; + +/// Expression version of transform +Expression transformTo(const Expression& x, + const Expression& p) { + return Expression(0); +} + +/// Expression version of project +Expression project(const Expression& p) { + return Expression(0); +} + +/// Expression version of uncalibrate +Expression uncalibrate(const Expression& K, + const Expression& p) { + return Expression(0); +} + +/// Expression version of Point2.sub +Expression operator -(const Expression& p, + const Expression& q) { + return Expression(0); +} + +/// AD Factor +template +class BADFactor: NoiseModelFactor { + +public: + + /// Constructor + BADFactor(const Expression& t) { + } + + Vector unwhitenedError(const Values& x, + boost::optional&> H = boost::none) const { + if (H) H->push_back(zeros(2,2)); + return Vector(); + } + +}; + +/* ************************************************************************* */ + +TEST(BAD, test) { + + // Create leaves + Expression x(1); + Expression p(2); + Expression K(3); + Expression uv(Point2(300, 62)); + + // Create expression tree + Expression p_cam = transformTo(x, p); + Expression projection = project(p_cam); + Expression uv_hat = uncalibrate(K, projection); + Expression e = uv - uv_hat; + + // Create factor + BADFactor f(e); + + // evaluate, with derivatives + Values values; + vector jacobians; + Vector actual = f.unwhitenedError(values, jacobians); + + // Check value + Vector expected = (Vector(2) << 0, 0); + EXPECT(assert_equal(expected, actual)); + + // Check derivatives + Matrix expectedHx = zeros(2,3); + EXPECT(assert_equal(expectedHx, jacobians[0])); +} + +/* ************************************************************************* */ +int main() { + TestResult tr; + return TestRegistry::runAllTests(tr); +} +/* ************************************************************************* */ +