169 lines
3.8 KiB
C++
169 lines
3.8 KiB
C++
/*
|
|
* testTupleConfig.cpp
|
|
*
|
|
* Created on: Jan 13, 2010
|
|
* Author: richard
|
|
*/
|
|
|
|
#include <CppUnitLite/TestHarness.h>
|
|
#include <stdexcept>
|
|
#include <Pose2.h>
|
|
#include <Point2.h>
|
|
|
|
#include "Vector.h"
|
|
#include "Key.h"
|
|
#include "VectorConfig.h"
|
|
#include "TupleConfig-inl.h"
|
|
|
|
using namespace gtsam;
|
|
using namespace std;
|
|
|
|
typedef Symbol<Pose2, 'x'> PoseKey;
|
|
typedef Symbol<Point2, 'l'> PointKey;
|
|
typedef PairConfig<PoseKey, Pose2, PointKey, Point2> Config;
|
|
|
|
/* ************************************************************************* */
|
|
TEST( PairConfig, insert_equals1 )
|
|
{
|
|
Pose2 x1(1,2,3), x2(6,7,8);
|
|
Point2 l1(4,5), l2(9,10);
|
|
|
|
Config expected;
|
|
expected.insert(1, x1);
|
|
expected.insert(2, x2);
|
|
expected.insert(1, l1);
|
|
expected.insert(2, l2);
|
|
|
|
Config actual;
|
|
actual.insert(1, x1);
|
|
actual.insert(2, x2);
|
|
actual.insert(1, l1);
|
|
actual.insert(2, l2);
|
|
|
|
CHECK(assert_equal(expected,actual));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST( PairConfig, insert_equals2 )
|
|
{
|
|
Pose2 x1(1,2,3), x2(6,7,8);
|
|
Point2 l1(4,5), l2(9,10);
|
|
|
|
Config cfg1;
|
|
cfg1.insert(1, x1);
|
|
cfg1.insert(2, x2);
|
|
cfg1.insert(1, l1);
|
|
cfg1.insert(2, l2);
|
|
|
|
Config cfg2;
|
|
cfg2.insert(1, x1);
|
|
cfg2.insert(2, x2);
|
|
cfg2.insert(1, l1);
|
|
|
|
CHECK(!cfg1.equals(cfg2));
|
|
|
|
cfg2.insert(2, Point2(9,11));
|
|
|
|
CHECK(!cfg1.equals(cfg2));
|
|
}
|
|
|
|
///* ************************************************************************* */
|
|
//TEST( PairConfig, insert_duplicate )
|
|
//{
|
|
// Pose2 x1(1,2,3), x2(6,7,8);
|
|
// Point2 l1(4,5), l2(9,10);
|
|
//
|
|
// Config cfg1;
|
|
// cfg1.insert(1, x1);
|
|
// cfg1.insert(2, x2);
|
|
// cfg1.insert(1, l1);
|
|
// cfg1.insert(2, l2);
|
|
// cfg1.insert(2, l1);
|
|
//
|
|
// CHECK(assert_equal(l2, cfg1[PointKey(2)]));
|
|
// CHECK(cfg1.size() == 4);
|
|
// CHECK(cfg1.dim() == 10);
|
|
//}
|
|
|
|
|
|
/* ************************************************************************* */
|
|
TEST( PairConfig, size_dim )
|
|
{
|
|
Pose2 x1(1,2,3), x2(6,7,8);
|
|
Point2 l1(4,5), l2(9,10);
|
|
|
|
Config cfg1;
|
|
cfg1.insert(1, x1);
|
|
cfg1.insert(2, x2);
|
|
cfg1.insert(1, l1);
|
|
cfg1.insert(2, l2);
|
|
|
|
CHECK(cfg1.size() == 4);
|
|
CHECK(cfg1.dim() == 10);
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST(PairConfig, at)
|
|
{
|
|
Pose2 x1(1,2,3), x2(6,7,8);
|
|
Point2 l1(4,5), l2(9,10);
|
|
|
|
Config cfg1;
|
|
cfg1.insert(1, x1);
|
|
cfg1.insert(2, x2);
|
|
cfg1.insert(1, l1);
|
|
cfg1.insert(2, l2);
|
|
|
|
CHECK(assert_equal(x1, cfg1[PoseKey(1)]));
|
|
CHECK(assert_equal(x2, cfg1[PoseKey(2)]));
|
|
CHECK(assert_equal(l1, cfg1[PointKey(1)]));
|
|
CHECK(assert_equal(l2, cfg1[PointKey(2)]));
|
|
|
|
bool caught = false;
|
|
try {
|
|
cfg1[PoseKey(3)];
|
|
} catch(invalid_argument e) {
|
|
caught = true;
|
|
}
|
|
CHECK(caught);
|
|
|
|
caught = false;
|
|
try {
|
|
cfg1[PointKey(3)];
|
|
} catch(invalid_argument e) {
|
|
caught = true;
|
|
}
|
|
CHECK(caught);
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
TEST(PairConfig, expmap)
|
|
{
|
|
Pose2 x1(1,2,3), x2(6,7,8);
|
|
Point2 l1(4,5), l2(9,10);
|
|
|
|
Config cfg1;
|
|
cfg1.insert(1, x1);
|
|
cfg1.insert(2, x2);
|
|
cfg1.insert(1, l1);
|
|
cfg1.insert(2, l2);
|
|
|
|
VectorConfig increment;
|
|
increment.insert("x1", Vector_(3, 1.0, 1.1, 1.2));
|
|
increment.insert("x2", Vector_(3, 1.3, 1.4, 1.5));
|
|
increment.insert("l1", Vector_(2, 1.0, 1.1));
|
|
increment.insert("l2", Vector_(2, 1.3, 1.4));
|
|
|
|
Config expected;
|
|
expected.insert(1, expmap(x1, Vector_(3, 1.0, 1.1, 1.2)));
|
|
expected.insert(2, expmap(x2, Vector_(3, 1.3, 1.4, 1.5)));
|
|
expected.insert(1, Point2(5.0, 6.1));
|
|
expected.insert(2, Point2(10.3, 11.4));
|
|
|
|
CHECK(assert_equal(expected, expmap(cfg1, increment)));
|
|
}
|
|
|
|
/* ************************************************************************* */
|
|
int main() { TestResult tr; return TestRegistry::runAllTests(tr); }
|
|
/* ************************************************************************* */
|