diff --git a/cpp/testFactorGraph.cpp b/cpp/testFactorGraph.cpp new file mode 100644 index 000000000..05b76d219 --- /dev/null +++ b/cpp/testFactorGraph.cpp @@ -0,0 +1,90 @@ +/** + * @file testFactorgraph.cpp + * @brief Unit tests for Factor Graphs + * @author Christian Potthast + **/ + +/*STL/C++*/ +#include +#include +#include +#include +#include // for operator += +using namespace boost::assign; + +#include + +#define GTSAM_MAGIC_KEY +#include "SymbolicFactorGraph.h" + +using namespace std; +using namespace gtsam; + +typedef boost::shared_ptr shared; + +/* ************************************************************************* */ +TEST( FactorGraph, splitMinimumSpanningTree ) +{ + SymbolicFactorGraph G; + G.push_factor("x1", "x2"); + G.push_factor("x1", "x3"); + G.push_factor("x1", "x4"); + G.push_factor("x2", "x3"); + G.push_factor("x2", "x4"); + G.push_factor("x3", "x4"); + + SymbolicFactorGraph T, C; + boost::tie(T, C) = G.splitMinimumSpanningTree(); + + SymbolicFactorGraph expectedT, expectedC; + expectedT.push_factor("x1", "x2"); + expectedT.push_factor("x1", "x3"); + expectedT.push_factor("x1", "x4"); + expectedC.push_factor("x2", "x3"); + expectedC.push_factor("x2", "x4"); + expectedC.push_factor("x3", "x4"); + CHECK(assert_equal(expectedT,T)); + CHECK(assert_equal(expectedC,C)); +} + +/* ************************************************************************* */ +/** + * x1 - x2 - x3 - x4 - x5 + * | | / | + * l1 l2 l3 + */ +TEST( FactorGraph, removeSingletons ) +{ + SymbolicFactorGraph G; + G.push_factor("x1", "x2"); + G.push_factor("x2", "x3"); + G.push_factor("x3", "x4"); + G.push_factor("x4", "x5"); + G.push_factor("x2", "l1"); + G.push_factor("x3", "l2"); + G.push_factor("x4", "l2"); + G.push_factor("x4", "l3"); + + SymbolicFactorGraph singletonGraph; + set singletons; + boost::tie(singletonGraph, singletons) = G.removeSingletons(); + + set singletons_excepted; singletons_excepted += "x1", "x2", "x5", "l1", "l3"; + CHECK(singletons_excepted == singletons); + + SymbolicFactorGraph singletonGraph_excepted; + singletonGraph_excepted.push_factor("x2", "l1"); + singletonGraph_excepted.push_factor("x4", "l3"); + singletonGraph_excepted.push_factor("x1", "x2"); + singletonGraph_excepted.push_factor("x4", "x5"); + singletonGraph_excepted.push_factor("x2", "x3"); + CHECK(singletonGraph_excepted.equals(singletonGraph)); +} + + +/* ************************************************************************* */ +int main() { + TestResult tr; + return TestRegistry::runAllTests(tr); +} +/* ************************************************************************* */