Added partial multifrontal elimination unit test

release/4.3a0
Richard Roberts 2013-06-17 21:16:11 +00:00
parent aa3e9b9230
commit 73179dbabc
2 changed files with 51 additions and 22 deletions

View File

@ -152,7 +152,7 @@ TEST(EliminationTree, eliminateAsiaExample)
(boost::make_shared<SymbolicConditionalUnordered>(_L_, _B_))
(boost::make_shared<SymbolicConditionalUnordered>(_B_));
SymbolicBayesNetUnordered actual = *createAsiaGraph().eliminateSequential(
SymbolicBayesNetUnordered actual = *asiaGraph.eliminateSequential(
EliminateSymbolicUnordered, asiaOrdering);
EXPECT(assert_equal(expected, actual));
@ -176,7 +176,8 @@ TEST(EliminationTree, disconnected_graph) {
OrderingUnordered order;
order += 0,1,2,3,4;
SymbolicBayesNetUnordered actual = *SymbolicEliminationTreeUnordered(fg, order).eliminate(EliminateSymbolicUnordered).first;
SymbolicBayesNetUnordered actual = *SymbolicEliminationTreeUnordered(fg, order)
.eliminate(EliminateSymbolicUnordered).first;
EXPECT(assert_equal(expected,actual));
}

View File

@ -19,38 +19,66 @@
#include <gtsam/symbolic/SymbolicFactorGraphUnordered.h>
#include <gtsam/symbolic/SymbolicBayesNetUnordered.h>
#include <boost/assign/list_of.hpp>
using namespace std;
using namespace gtsam;
using namespace boost::assign;
namespace {
const SymbolicFactorGraphUnordered simpleTestGraph = list_of
(boost::make_shared<SymbolicFactorUnordered>(0,1))
(boost::make_shared<SymbolicFactorUnordered>(0,2))
(boost::make_shared<SymbolicFactorUnordered>(1,3))
(boost::make_shared<SymbolicFactorUnordered>(1,4))
(boost::make_shared<SymbolicFactorUnordered>(2,3))
(boost::make_shared<SymbolicFactorUnordered>(4,5));
}
/* ************************************************************************* */
TEST(FactorGraph, eliminateFrontals) {
TEST(SymbolicFactorGraph, eliminatePartialSequential)
{
SymbolicBayesNetUnordered expectedBayesNet;
expectedBayesNet.add(SymbolicConditionalUnordered::FromKeys(list_of(0)(1)(2), 1));
expectedBayesNet.add(SymbolicConditionalUnordered::FromKeys(list_of(1)(2)(3)(4), 1));
SymbolicFactorGraph sfgOrig;
sfgOrig.push_factor(0,1);
sfgOrig.push_factor(0,2);
sfgOrig.push_factor(1,3);
sfgOrig.push_factor(1,4);
sfgOrig.push_factor(2,3);
sfgOrig.push_factor(4,5);
IndexConditional::shared_ptr actualCond;
SymbolicFactorGraph actualSfg;
boost::tie(actualCond, actualSfg) = sfgOrig.eliminateFrontals(2);
vector<Index> condIndices;
condIndices += 0,1,2,3,4;
IndexConditional expectedCond(condIndices, 2);
SymbolicFactorGraph expectedSfg;
SymbolicFactorGraphUnordered expectedSfg;
expectedSfg.push_factor(2,3);
expectedSfg.push_factor(4,5);
expectedSfg.push_factor(2,3,4);
EXPECT(assert_equal(expectedSfg, actualSfg));
EXPECT(assert_equal(expectedCond, *actualCond));
SymbolicBayesNetUnordered::shared_ptr actualBayesNet;
SymbolicFactorGraphUnordered::shared_ptr actualSfg;
boost::tie(actualBayesNet, actualSfg) = simpleTestGraph.eliminatePartialSequential(
EliminateSymbolicUnordered, OrderingUnordered(list_of(0)(1)));
EXPECT(assert_equal(expectedSfg, *actualSfg));
EXPECT(assert_equal(expectedBayesNet, *actualBayesNet));
}
/* ************************************************************************* */
TEST(SymbolicFactorGraph, eliminatePartialMultifrontal)
{
SymbolicBayesTreeUnordered expectedBayesTree;
SymbolicConditionalUnordered::shared_ptr root = boost::make_shared<SymbolicConditionalUnordered>(
SymbolicConditionalUnordered::FromKeys(list_of(5)(4)(1), 2));
expectedBayesTree.insertRoot(boost::make_shared<SymbolicBayesTreeCliqueUnordered>(root));
SymbolicFactorGraphUnordered expectedFactorGraph;
expectedFactorGraph.push_factor(0,1);
expectedFactorGraph.push_factor(0,2);
expectedFactorGraph.push_factor(1,3);
expectedFactorGraph.push_factor(2,3);
expectedFactorGraph.push_factor(1);
SymbolicBayesTreeUnordered::shared_ptr actualBayesTree;
SymbolicFactorGraphUnordered::shared_ptr actualFactorGraph;
boost::tie(actualBayesTree, actualFactorGraph) = simpleTestGraph.eliminatePartialMultifrontal(
EliminateSymbolicUnordered, OrderingUnordered(list_of(4)(5)));
EXPECT(assert_equal(expectedFactorGraph, *actualFactorGraph));
EXPECT(assert_equal(expectedBayesTree, *actualBayesTree));
}
/* ************************************************************************* */
//TEST(SymbolicFactorGraph, eliminateFrontals) {
//