| 
									
										
										
										
											2012-09-19 01:48:18 +08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * @file testDummyFactor.cpp | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @brief A simple dummy nonlinear factor that can be used to enforce connectivity | 
					
						
							|  |  |  |  * without adding any real information | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @date Sep 10, 2012 | 
					
						
							|  |  |  |  * @author Alex Cunningham | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <CppUnitLite/TestHarness.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam/geometry/Point3.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam_unstable/slam/DummyFactor.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const double tol = 1e-9; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST( testDummyFactor, basics ) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-02 22:40:07 +08:00
										 |  |  |   gtsam::Key key1 = 7, key2 = 9; | 
					
						
							|  |  |  |   size_t dim1 = 3, dim2 = 3; | 
					
						
							|  |  |  |   DummyFactor dummyfactor(key1, dim1, key2, dim2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // verify contents
 | 
					
						
							|  |  |  |   LONGS_EQUAL(2, dummyfactor.size()); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(key1, dummyfactor.keys()[0]); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(key2, dummyfactor.keys()[1]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LONGS_EQUAL(2, dummyfactor.dims().size()); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(dim1, dummyfactor.dims()[0]); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(dim2, dummyfactor.dims()[1]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Values c; | 
					
						
							|  |  |  |   c.insert(key1, Point3(1.0, 2.0, 3.0)); | 
					
						
							|  |  |  |   c.insert(key2, Point3(4.0, 5.0, 6.0)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // errors - all zeros
 | 
					
						
							|  |  |  |   DOUBLES_EQUAL(0.0, dummyfactor.error(c), tol); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Ordering ordering; | 
					
						
							|  |  |  |   ordering += key1, key2; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // linearization: all zeros
 | 
					
						
							|  |  |  |   GaussianFactor::shared_ptr actLinearization = dummyfactor.linearize(c, ordering); | 
					
						
							|  |  |  |   CHECK(actLinearization); | 
					
						
							|  |  |  |   noiseModel::Diagonal::shared_ptr model3 = noiseModel::Unit::Create(3); | 
					
						
							|  |  |  |   GaussianFactor::shared_ptr expLinearization(new JacobianFactor( | 
					
						
							|  |  |  |       ordering[key1], zeros(3,3), ordering[key2], zeros(3,3), zero(3), model3)); | 
					
						
							|  |  |  |   EXPECT(assert_equal(*expLinearization, *actLinearization, tol)); | 
					
						
							| 
									
										
										
										
											2012-09-19 01:48:18 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main() { TestResult tr; return TestRegistry::runAllTests(tr); } | 
					
						
							|  |  |  | /* ************************************************************************* */ |