| 
									
										
										
										
											2010-10-14 12:54:38 +08:00
										 |  |  | /* ----------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * 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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  |  * @file testTupleValues.cpp | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  |  * @author Richard Roberts | 
					
						
							|  |  |  |  * @author Alex Cunningham | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-26 04:10:33 +08:00
										 |  |  | #include <CppUnitLite/TestHarness.h>
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | #include <stdexcept>
 | 
					
						
							| 
									
										
										
										
											2010-01-18 03:34:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 04:54:12 +08:00
										 |  |  | #include <gtsam/base/TestableAssertions.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-18 21:18:26 +08:00
										 |  |  | // Magically casts strings like "x3" to a Symbol('x',3) key, see Key.h
 | 
					
						
							| 
									
										
										
										
											2010-01-18 03:34:57 +08:00
										 |  |  | #define GTSAM_MAGIC_KEY
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/geometry/Pose2.h>
 | 
					
						
							|  |  |  | #include <gtsam/geometry/Point2.h>
 | 
					
						
							|  |  |  | #include <gtsam/geometry/Pose3.h>
 | 
					
						
							|  |  |  | #include <gtsam/geometry/Point3.h>
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-20 01:23:19 +08:00
										 |  |  | #include <gtsam/base/Vector.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | #include <gtsam/nonlinear/Key.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | #include <gtsam/nonlinear/TupleValues-inl.h>
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | static const double tol = 1e-5; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-18 03:34:57 +08:00
										 |  |  | typedef TypedSymbol<Pose2, 'x'> PoseKey; | 
					
						
							|  |  |  | typedef TypedSymbol<Point2, 'l'> PointKey; | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | typedef LieValues<PoseKey> PoseValues; | 
					
						
							|  |  |  | typedef LieValues<PointKey> PointValues; | 
					
						
							|  |  |  | typedef TupleValues2<PoseValues, PointValues> Values; | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, constructors ) | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  | 	Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	Values::Values1 cfg1; | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | 	cfg1.insert(PoseKey(1), x1); | 
					
						
							|  |  |  | 	cfg1.insert(PoseKey(2), x2); | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	Values::Values2 cfg2; | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | 	cfg2.insert(PointKey(1), l1); | 
					
						
							|  |  |  | 	cfg2.insert(PointKey(2), l2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	Values actual(cfg1, cfg2), expected; | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | 	expected.insert(PoseKey(1), x1); | 
					
						
							|  |  |  | 	expected.insert(PoseKey(2), x2); | 
					
						
							|  |  |  | 	expected.insert(PointKey(1), l1); | 
					
						
							|  |  |  | 	expected.insert(PointKey(2), l2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CHECK(assert_equal(expected, actual)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, insert_equals1 ) | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-06-08 02:00:43 +08:00
										 |  |  | 	Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  | 	Point2 l1(4,5), l2(9,10); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Values expected; | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  |   expected.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   expected.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   expected.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   expected.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Values actual; | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  |   actual.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   actual.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   actual.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   actual.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   CHECK(assert_equal(expected,actual)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-15 05:15:45 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, insert_equals2 ) | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  |   Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values1; | 
					
						
							|  |  |  |   values1.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   values1.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   values1.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   values1.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values2; | 
					
						
							|  |  |  |   values2.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   values2.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   values2.insert(PointKey(1), l1); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   CHECK(!values1.equals(values2)); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   values2.insert(2, Point2(9,11)); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   CHECK(!values1.equals(values2)); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-31 00:19:52 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, insert_duplicate ) | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  |   Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values1; | 
					
						
							|  |  |  |   values1.insert(1, x1); // 3
 | 
					
						
							|  |  |  |   values1.insert(2, x2); // 6
 | 
					
						
							|  |  |  |   values1.insert(1, l1); // 8
 | 
					
						
							|  |  |  |   values1.insert(2, l2); // 10
 | 
					
						
							|  |  |  |   values1.insert(2, l1); // still 10 !!!!
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   CHECK(assert_equal(l2, values1[PointKey(2)])); | 
					
						
							|  |  |  |   LONGS_EQUAL(4,values1.size()); | 
					
						
							|  |  |  |   LONGS_EQUAL(10,values1.dim()); | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, size_dim ) | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  |   Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values1; | 
					
						
							|  |  |  |   values1.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   values1.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   values1.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   values1.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   EXPECT(values1.size() == 4); | 
					
						
							|  |  |  |   EXPECT(values1.dim() == 10); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, at) | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  |   Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values1; | 
					
						
							|  |  |  |   values1.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   values1.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   values1.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   values1.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   EXPECT(assert_equal(x1, values1[PoseKey(1)])); | 
					
						
							|  |  |  |   EXPECT(assert_equal(x2, values1[PoseKey(2)])); | 
					
						
							|  |  |  |   EXPECT(assert_equal(l1, values1[PointKey(1)])); | 
					
						
							|  |  |  |   EXPECT(assert_equal(l2, values1[PointKey(2)])); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   CHECK_EXCEPTION(values1[PoseKey(3)], std::invalid_argument); | 
					
						
							|  |  |  |   CHECK_EXCEPTION(values1[PointKey(3)], std::invalid_argument); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, zero_expmap_logmap) | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | { | 
					
						
							|  |  |  |   Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  |   Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values values1; | 
					
						
							|  |  |  |   values1.insert(PoseKey(1), x1); | 
					
						
							|  |  |  |   values1.insert(PoseKey(2), x2); | 
					
						
							|  |  |  |   values1.insert(PointKey(1), l1); | 
					
						
							|  |  |  |   values1.insert(PointKey(2), l2); | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   Ordering o; o += "x1", "x2", "l1", "l2"; | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   VectorValues expected_zero(values1.dims(o)); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   expected_zero[o["x1"]] = zero(3); | 
					
						
							|  |  |  |   expected_zero[o["x2"]] = zero(3); | 
					
						
							|  |  |  |   expected_zero[o["l1"]] = zero(2); | 
					
						
							|  |  |  |   expected_zero[o["l2"]] = zero(2); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   CHECK(assert_equal(expected_zero, values1.zero(o))); | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   VectorValues delta(values1.dims(o)); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   delta[o["x1"]] = Vector_(3, 1.0, 1.1, 1.2); | 
					
						
							|  |  |  |   delta[o["x2"]] = Vector_(3, 1.3, 1.4, 1.5); | 
					
						
							|  |  |  |   delta[o["l1"]] = Vector_(2, 1.0, 1.1); | 
					
						
							|  |  |  |   delta[o["l2"]] = Vector_(2, 1.3, 1.4); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Values expected; | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  |   expected.insert(PoseKey(1), x1.expmap(Vector_(3, 1.0, 1.1, 1.2))); | 
					
						
							|  |  |  |   expected.insert(PoseKey(2), x2.expmap(Vector_(3, 1.3, 1.4, 1.5))); | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  |   expected.insert(PointKey(1), Point2(5.0, 6.1)); | 
					
						
							|  |  |  |   expected.insert(PointKey(2), Point2(10.3, 11.4)); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   Values actual = values1.expmap(delta, o); | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  |   CHECK(assert_equal(expected, actual)); | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Check log
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   VectorValues expected_log = delta; | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   VectorValues actual_log = values1.logmap(actual, o); | 
					
						
							| 
									
										
										
										
											2010-03-10 08:21:01 +08:00
										 |  |  |   CHECK(assert_equal(expected_log, actual_log)); | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // some key types
 | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | typedef TypedSymbol<LieVector, 'L'> LamKey; | 
					
						
							| 
									
										
										
										
											2010-02-04 11:40:03 +08:00
										 |  |  | typedef TypedSymbol<Pose3, 'a'> Pose3Key; | 
					
						
							|  |  |  | typedef TypedSymbol<Point3, 'b'> Point3Key; | 
					
						
							|  |  |  | typedef TypedSymbol<Point3, 'c'> Point3Key2; | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | // some values types
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | typedef LieValues<PoseKey> PoseValues; | 
					
						
							|  |  |  | typedef LieValues<PointKey> PointValues; | 
					
						
							|  |  |  | typedef LieValues<LamKey> LamValues; | 
					
						
							|  |  |  | typedef LieValues<Pose3Key> Pose3Values; | 
					
						
							|  |  |  | typedef LieValues<Point3Key> Point3Values; | 
					
						
							|  |  |  | typedef LieValues<Point3Key2> Point3Values2; | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | // some TupleValues types
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | typedef TupleValues<PoseValues, TupleValuesEnd<PointValues> > ValuesA; | 
					
						
							|  |  |  | typedef TupleValues<PoseValues, TupleValues<PointValues, TupleValuesEnd<LamValues> > > ValuesB; | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | typedef TupleValues1<PoseValues> TuplePoseValues; | 
					
						
							|  |  |  | typedef TupleValues1<PointValues> TuplePointValues; | 
					
						
							|  |  |  | typedef TupleValues2<PoseValues, PointValues> SimpleValues; | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, slicing) { | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 	PointKey l1(1), l2(2); | 
					
						
							|  |  |  | 	Point2 l1_val(1.0, 2.0), l2_val(3.0, 4.0); | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	Pose2 x1_val(1.0, 2.0, 0.3), x2_val(3.0, 4.0, 0.4); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	PoseValues liePoseValues; | 
					
						
							|  |  |  | 	liePoseValues.insert(x1, x1_val); | 
					
						
							|  |  |  | 	liePoseValues.insert(x2, x2_val); | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	PointValues liePointValues; | 
					
						
							|  |  |  | 	liePointValues.insert(l1, l1_val); | 
					
						
							|  |  |  | 	liePointValues.insert(l2, l2_val); | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	// construct TupleValues1 from the base values
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	TuplePoseValues tupPoseValues1(liePoseValues); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(liePoseValues, tupPoseValues1.first(), tol)); | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	TuplePointValues tupPointValues1(liePointValues); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(liePointValues, tupPointValues1.first(), tol)); | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | //	// construct a TupleValues2 from a TupleValues1
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | //	SimpleValues pairValues1(tupPoseValues1);
 | 
					
						
							|  |  |  | //	EXPECT(assert_equal(liePoseValues, pairValues1.first(), tol));
 | 
					
						
							|  |  |  | //	EXPECT(pairValues1.second().empty());
 | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | //	SimpleValues pairValues2(tupPointValues1);
 | 
					
						
							|  |  |  | //	EXPECT(assert_equal(liePointValues, pairValues2.second(), tol));
 | 
					
						
							|  |  |  | //	EXPECT(pairValues1.first().empty());
 | 
					
						
							| 
									
										
										
										
											2010-08-12 20:44:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, basic_functions) { | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	// create some tuple values
 | 
					
						
							|  |  |  | 	ValuesA valuesA; | 
					
						
							|  |  |  | 	ValuesB valuesB; | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	PoseKey x1(1); | 
					
						
							|  |  |  | 	PointKey l1(1); | 
					
						
							|  |  |  | 	LamKey L1(1); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0); | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	LieVector lam1 = LieVector(2.3); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Insert
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	valuesA.insert(x1, pose1); | 
					
						
							|  |  |  | 	valuesA.insert(l1, point1); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	valuesB.insert(x1, pose1); | 
					
						
							|  |  |  | 	valuesB.insert(l1, point1); | 
					
						
							|  |  |  | 	valuesB.insert(L1, lam1); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-03 21:57:34 +08:00
										 |  |  | 	// bracket operator
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(assert_equal(valuesA[x1], pose1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesA[l1], point1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB[x1], pose1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB[l1], point1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB[L1], lam1)); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// exists
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(valuesA.exists(x1)); | 
					
						
							|  |  |  | 	EXPECT(valuesA.exists(l1)); | 
					
						
							|  |  |  | 	EXPECT(valuesB.exists(x1)); | 
					
						
							|  |  |  | 	EXPECT(valuesB.exists(l1)); | 
					
						
							|  |  |  | 	EXPECT(valuesB.exists(L1)); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-03 21:57:34 +08:00
										 |  |  | 	// at
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(assert_equal(valuesA.at(x1), pose1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesA.at(l1), point1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB.at(x1), pose1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB.at(l1), point1)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(valuesB.at(L1), lam1)); | 
					
						
							| 
									
										
										
										
											2010-02-03 22:08:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// size
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(valuesA.size() == 2); | 
					
						
							|  |  |  | 	EXPECT(valuesB.size() == 3); | 
					
						
							| 
									
										
										
										
											2010-02-03 22:08:09 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// dim
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(valuesA.dim() == 5); | 
					
						
							|  |  |  | 	EXPECT(valuesB.dim() == 6); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// erase
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	valuesA.erase(x1); | 
					
						
							|  |  |  | 	CHECK(!valuesA.exists(x1)); | 
					
						
							|  |  |  | 	CHECK(valuesA.size() == 1); | 
					
						
							|  |  |  | 	valuesA.erase(l1); | 
					
						
							|  |  |  | 	CHECK(!valuesA.exists(l1)); | 
					
						
							|  |  |  | 	CHECK(valuesA.size() == 0); | 
					
						
							|  |  |  | 	valuesB.erase(L1); | 
					
						
							|  |  |  | 	CHECK(!valuesB.exists(L1)); | 
					
						
							|  |  |  | 	CHECK(valuesB.size() == 2); | 
					
						
							| 
									
										
										
										
											2010-07-31 00:19:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// clear
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	valuesA.clear(); | 
					
						
							|  |  |  | 	EXPECT(valuesA.size() == 0); | 
					
						
							|  |  |  | 	valuesB.clear(); | 
					
						
							|  |  |  | 	EXPECT(valuesB.size() == 0); | 
					
						
							| 
									
										
										
										
											2010-07-31 00:19:52 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// empty
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(valuesA.empty()); | 
					
						
							|  |  |  | 	EXPECT(valuesB.empty()); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | TEST(TupleValues, insert_values) { | 
					
						
							|  |  |  | 	ValuesB values1, values2, expected; | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	PointKey l1(1), l2(2); | 
					
						
							|  |  |  | 	LamKey L1(1), L2(2); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3), pose2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0), point2(5.0, 6.0); | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	LieVector lam1 = LieVector(2.3), lam2 = LieVector(4.5); | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values1.insert(x1, pose1); | 
					
						
							|  |  |  | 	values1.insert(l1, point1); | 
					
						
							|  |  |  | 	values1.insert(L1, lam1); | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values2.insert(x2, pose2); | 
					
						
							|  |  |  | 	values2.insert(l2, point2); | 
					
						
							|  |  |  | 	values2.insert(L2, lam2); | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values1.insert(values2); | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	expected.insert(x1, pose1); | 
					
						
							|  |  |  | 	expected.insert(l1, point1); | 
					
						
							|  |  |  | 	expected.insert(L1, lam1); | 
					
						
							|  |  |  | 	expected.insert(x2, pose2); | 
					
						
							|  |  |  | 	expected.insert(l2, point2); | 
					
						
							|  |  |  | 	expected.insert(L2, lam2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	CHECK(assert_equal(expected, values1)); | 
					
						
							| 
									
										
										
										
											2010-02-25 10:50:01 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-04 21:41:46 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, update_element ) | 
					
						
							| 
									
										
										
										
											2010-05-04 21:41:46 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	TupleValues2<PoseValues, PointValues> cfg; | 
					
						
							| 
									
										
										
										
											2010-05-04 21:41:46 +08:00
										 |  |  | 	Pose2 x1(2.0, 1.0, 2.0), x2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	Point2 l1(1.0, 2.0), l2(3.0, 4.0); | 
					
						
							|  |  |  | 	PoseKey xk(1); | 
					
						
							|  |  |  | 	PointKey lk(1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cfg.insert(xk, x1); | 
					
						
							|  |  |  | 	CHECK(cfg.size() == 1); | 
					
						
							|  |  |  | 	CHECK(assert_equal(x1, cfg.at(xk))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cfg.update(xk, x2); | 
					
						
							|  |  |  | 	CHECK(cfg.size() == 1); | 
					
						
							|  |  |  | 	CHECK(assert_equal(x2, cfg.at(xk))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cfg.insert(lk, l1); | 
					
						
							|  |  |  | 	CHECK(cfg.size() == 2); | 
					
						
							|  |  |  | 	CHECK(assert_equal(l1, cfg.at(lk))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	cfg.update(lk, l2); | 
					
						
							|  |  |  | 	CHECK(cfg.size() == 2); | 
					
						
							|  |  |  | 	CHECK(assert_equal(l2, cfg.at(lk))); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST( TupleValues, equals ) | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Pose2 x1(1,2,3), x2(6,7,8), x2_alt(5,6,7); | 
					
						
							|  |  |  | 	PoseKey x1k(1), x2k(2); | 
					
						
							|  |  |  | 	Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 	PointKey l1k(1), l2k(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	ValuesA values1, values2, values3, values4, values5; | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values1.insert(x1k, x1); | 
					
						
							|  |  |  | 	values1.insert(x2k, x2); | 
					
						
							|  |  |  | 	values1.insert(l1k, l1); | 
					
						
							|  |  |  | 	values1.insert(l2k, l2); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values2.insert(x1k, x1); | 
					
						
							|  |  |  | 	values2.insert(x2k, x2); | 
					
						
							|  |  |  | 	values2.insert(l1k, l1); | 
					
						
							|  |  |  | 	values2.insert(l2k, l2); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values3.insert(x2k, x2); | 
					
						
							|  |  |  | 	values3.insert(l1k, l1); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values4.insert(x1k, x1); | 
					
						
							|  |  |  | 	values4.insert(x2k, x2_alt); | 
					
						
							|  |  |  | 	values4.insert(l1k, l1); | 
					
						
							|  |  |  | 	values4.insert(l2k, l2); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	ValuesA values6(values1); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	EXPECT(assert_equal(values1,values2)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(values1,values1)); | 
					
						
							|  |  |  | 	EXPECT(assert_inequal(values1,values3)); | 
					
						
							|  |  |  | 	EXPECT(assert_inequal(values1,values4)); | 
					
						
							|  |  |  | 	EXPECT(assert_inequal(values1,values5)); | 
					
						
							|  |  |  | 	EXPECT(assert_equal(values1, values6)); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, expmap) | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  | 	PoseKey x1k(1), x2k(2); | 
					
						
							|  |  |  | 	Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 	PointKey l1k(1), l2k(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 	Ordering o; o += "x1", "x2", "l1", "l2"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	ValuesA values1; | 
					
						
							|  |  |  | 	values1.insert(x1k, x1); | 
					
						
							|  |  |  | 	values1.insert(x2k, x2); | 
					
						
							|  |  |  | 	values1.insert(l1k, l1); | 
					
						
							|  |  |  | 	values1.insert(l2k, l2); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	VectorValues delta(values1.dims(o)); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | 	delta[o["x1"]] = Vector_(3, 1.0, 1.1, 1.2); | 
					
						
							|  |  |  | 	delta[o["x2"]] = Vector_(3, 1.3, 1.4, 1.5); | 
					
						
							|  |  |  | 	delta[o["l1"]] = Vector_(2, 1.0, 1.1); | 
					
						
							|  |  |  | 	delta[o["l2"]] = Vector_(2, 1.3, 1.4); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	ValuesA expected; | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	expected.insert(x1k, x1.expmap(Vector_(3, 1.0, 1.1, 1.2))); | 
					
						
							|  |  |  | 	expected.insert(x2k, x2.expmap(Vector_(3, 1.3, 1.4, 1.5))); | 
					
						
							| 
									
										
										
										
											2010-02-04 10:04:45 +08:00
										 |  |  | 	expected.insert(l1k, Point2(5.0, 6.1)); | 
					
						
							|  |  |  | 	expected.insert(l2k, Point2(10.3, 11.4)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	CHECK(assert_equal(expected, values1.expmap(delta, o))); | 
					
						
							|  |  |  | 	CHECK(assert_equal(delta, values1.logmap(expected, o))); | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, expmap_typedefs) | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | { | 
					
						
							|  |  |  | 	Pose2 x1(1,2,3), x2(6,7,8); | 
					
						
							|  |  |  | 	PoseKey x1k(1), x2k(2); | 
					
						
							|  |  |  | 	Point2 l1(4,5), l2(9,10); | 
					
						
							|  |  |  | 	PointKey l1k(1), l2k(2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   Ordering o; o += "x1", "x2", "l1", "l2"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	TupleValues2<PoseValues, PointValues> values1, expected, actual; | 
					
						
							|  |  |  | 	values1.insert(x1k, x1); | 
					
						
							|  |  |  | 	values1.insert(x2k, x2); | 
					
						
							|  |  |  | 	values1.insert(l1k, l1); | 
					
						
							|  |  |  | 	values1.insert(l2k, l2); | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  |   VectorValues delta(values1.dims(o)); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   delta[o["x1"]] = Vector_(3, 1.0, 1.1, 1.2); | 
					
						
							|  |  |  |   delta[o["x2"]] = Vector_(3, 1.3, 1.4, 1.5); | 
					
						
							|  |  |  |   delta[o["l1"]] = Vector_(2, 1.0, 1.1); | 
					
						
							|  |  |  |   delta[o["l2"]] = Vector_(2, 1.3, 1.4); | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	expected.insert(x1k, x1.expmap(Vector_(3, 1.0, 1.1, 1.2))); | 
					
						
							|  |  |  | 	expected.insert(x2k, x2.expmap(Vector_(3, 1.3, 1.4, 1.5))); | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | 	expected.insert(l1k, Point2(5.0, 6.1)); | 
					
						
							|  |  |  | 	expected.insert(l2k, Point2(10.3, 11.4)); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	CHECK(assert_equal(expected, TupleValues2<PoseValues, PointValues>(values1.expmap(delta, o)))); | 
					
						
							|  |  |  | 	//CHECK(assert_equal(delta, values1.logmap(expected)));
 | 
					
						
							| 
									
										
										
										
											2010-02-09 09:24:41 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-04 11:40:03 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, typedefs) | 
					
						
							| 
									
										
										
										
											2010-02-04 11:40:03 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	TupleValues2<PoseValues, PointValues> values1; | 
					
						
							|  |  |  | 	TupleValues3<PoseValues, PointValues, LamValues> values2; | 
					
						
							|  |  |  | 	TupleValues4<PoseValues, PointValues, LamValues, Point3Values> values3; | 
					
						
							|  |  |  | 	TupleValues5<PoseValues, PointValues, LamValues, Point3Values, Pose3Values> values4; | 
					
						
							|  |  |  | 	TupleValues6<PoseValues, PointValues, LamValues, Point3Values, Pose3Values, Point3Values2> values5; | 
					
						
							| 
									
										
										
										
											2010-02-04 11:40:03 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-05 01:15:09 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | TEST( TupleValues, pairvalues_style ) | 
					
						
							| 
									
										
										
										
											2010-02-05 01:15:09 +08:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  | 	PoseKey x1(1); | 
					
						
							|  |  |  | 	PointKey l1(1); | 
					
						
							|  |  |  | 	LamKey L1(1); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0); | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	LieVector lam1 = LieVector(2.3); | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	PoseValues values1; values1.insert(x1, pose1); | 
					
						
							|  |  |  | 	PointValues values2; values2.insert(l1, point1); | 
					
						
							|  |  |  | 	LamValues values3; values3.insert(L1, lam1); | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Constructor
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	TupleValues3<PoseValues, PointValues, LamValues> values(values1, values2, values3); | 
					
						
							| 
									
										
										
										
											2010-02-05 09:33:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// access
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	CHECK(assert_equal(values1, values.first())); | 
					
						
							|  |  |  | 	CHECK(assert_equal(values2, values.second())); | 
					
						
							|  |  |  | 	CHECK(assert_equal(values3, values.third())); | 
					
						
							| 
									
										
										
										
											2010-02-05 01:15:09 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-02-03 21:47:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | TEST(TupleValues, insert_values_typedef) { | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	TupleValues4<PoseValues, PointValues, LamValues, Point3Values> values1, values2, expected; | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	PointKey l1(1), l2(2); | 
					
						
							|  |  |  | 	LamKey L1(1), L2(2); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3), pose2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0), point2(5.0, 6.0); | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	LieVector lam1 = LieVector(2.3), lam2 = LieVector(4.5); | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values1.insert(x1, pose1); | 
					
						
							|  |  |  | 	values1.insert(l1, point1); | 
					
						
							|  |  |  | 	values1.insert(L1, lam1); | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values2.insert(x2, pose2); | 
					
						
							|  |  |  | 	values2.insert(l2, point2); | 
					
						
							|  |  |  | 	values2.insert(L2, lam2); | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	values1.insert(values2); | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	expected.insert(x1, pose1); | 
					
						
							|  |  |  | 	expected.insert(l1, point1); | 
					
						
							|  |  |  | 	expected.insert(L1, lam1); | 
					
						
							|  |  |  | 	expected.insert(x2, pose2); | 
					
						
							|  |  |  | 	expected.insert(l2, point2); | 
					
						
							|  |  |  | 	expected.insert(L2, lam2); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | 	CHECK(assert_equal(expected, values1)); | 
					
						
							| 
									
										
										
										
											2010-03-16 00:34:40 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-06 13:10:25 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, partial_insert) { | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	TupleValues3<PoseValues, PointValues, LamValues> init, expected; | 
					
						
							| 
									
										
										
										
											2010-03-18 00:24:22 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	PointKey l1(1), l2(2); | 
					
						
							|  |  |  | 	LamKey L1(1), L2(2); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3), pose2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0), point2(5.0, 6.0); | 
					
						
							| 
									
										
										
										
											2010-08-27 03:55:40 +08:00
										 |  |  | 	LieVector lam1 = LieVector(2.3), lam2 = LieVector(4.5); | 
					
						
							| 
									
										
										
										
											2010-02-06 13:10:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-03-18 00:24:22 +08:00
										 |  |  | 	init.insert(x1, pose1); | 
					
						
							|  |  |  | 	init.insert(l1, point1); | 
					
						
							|  |  |  | 	init.insert(L1, lam1); | 
					
						
							| 
									
										
										
										
											2010-02-06 13:10:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	PoseValues cfg1; | 
					
						
							| 
									
										
										
										
											2010-03-18 00:24:22 +08:00
										 |  |  | 	cfg1.insert(x2, pose2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	init.insertSub(cfg1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expected.insert(x1, pose1); | 
					
						
							|  |  |  | 	expected.insert(l1, point1); | 
					
						
							|  |  |  | 	expected.insert(L1, lam1); | 
					
						
							|  |  |  | 	expected.insert(x2, pose2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CHECK(assert_equal(expected, init)); | 
					
						
							| 
									
										
										
										
											2010-02-06 13:10:25 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-03-18 00:24:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-04-29 10:16:18 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:55 +08:00
										 |  |  | TEST(TupleValues, update) { | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | 	TupleValues3<PoseValues, PointValues, LamValues> init, superset, expected; | 
					
						
							| 
									
										
										
										
											2010-04-29 10:16:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	PointKey l1(1), l2(2); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3), pose2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	Point2 point1(2.0, 3.0), point2(5.0, 6.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	init.insert(x1, pose1); | 
					
						
							|  |  |  | 	init.insert(l1, point1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Pose2 pose1_(1.0, 2.0, 0.4); | 
					
						
							|  |  |  | 	Point2 point1_(2.0, 4.0); | 
					
						
							|  |  |  | 	superset.insert(x1, pose1_); | 
					
						
							|  |  |  | 	superset.insert(l1, point1_); | 
					
						
							|  |  |  | 	superset.insert(x2, pose2); | 
					
						
							|  |  |  | 	superset.insert(l2, point2); | 
					
						
							|  |  |  | 	init.update(superset); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expected.insert(x1, pose1_); | 
					
						
							|  |  |  | 	expected.insert(l1, point1_); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CHECK(assert_equal(expected, init)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-07 01:35:47 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST(TupleValues, arbitrary_ordering ) { | 
					
						
							|  |  |  | 	TupleValues1<PoseValues> values; | 
					
						
							|  |  |  | 	PoseKey x1(1), x2(2); | 
					
						
							|  |  |  | 	Pose2 pose1(1.0, 2.0, 0.3), pose2(3.0, 4.0, 5.0); | 
					
						
							|  |  |  | 	values.insert(x1, pose1); | 
					
						
							|  |  |  | 	values.insert(x2, pose2); | 
					
						
							|  |  |  | 	Ordering::shared_ptr actual = values.orderingArbitrary(); | 
					
						
							|  |  |  | 	Ordering expected; expected += x1, x2; | 
					
						
							|  |  |  | 	EXPECT(assert_equal(expected, *actual)); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2010-04-29 10:16:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 10:58:29 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main() { TestResult tr; return TestRegistry::runAllTests(tr); } | 
					
						
							|  |  |  | /* ************************************************************************* */ |