| 
									
										
										
										
											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-10-09 06:04:47 +08:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |  * @file    testVectorValues.cpp | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |  * @brief    | 
					
						
							|  |  |  |  * @author  Richard Roberts | 
					
						
							|  |  |  |  * @created Sep 16, 2010 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <vector>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | #include <gtsam/linear/VectorValues.h>
 | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | #include <gtsam/inference/Permutation.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <gtsam/CppUnitLite/TestHarness.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace gtsam; | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-11 12:30:20 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | TEST(VectorValues, standard) { | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   Vector v1 = Vector_(3, 1.0,2.0,3.0); | 
					
						
							|  |  |  |   Vector v2 = Vector_(2, 4.0,5.0); | 
					
						
							|  |  |  |   Vector v3 = Vector_(4, 6.0,7.0,8.0,9.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vector<size_t> dims(3); dims[0]=3; dims[1]=2; dims[2]=4; | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   VectorValues combined(dims); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   combined[0] = v1; | 
					
						
							|  |  |  |   combined[1] = v2; | 
					
						
							|  |  |  |   combined[2] = v3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   CHECK(assert_equal(combined[0], v1)) | 
					
						
							|  |  |  |   CHECK(assert_equal(combined[1], v2)) | 
					
						
							|  |  |  |   CHECK(assert_equal(combined[2], v3)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   VectorValues incremental; | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   incremental.reserve(3, 9); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v1); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v2); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   CHECK(assert_equal(incremental[0], v1)) | 
					
						
							|  |  |  |   CHECK(assert_equal(incremental[1], v2)) | 
					
						
							|  |  |  |   CHECK(assert_equal(incremental[2], v3)) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-11 12:30:20 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | TEST(VectorValues, permuted_combined) { | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   Vector v1 = Vector_(3, 1.0,2.0,3.0); | 
					
						
							|  |  |  |   Vector v2 = Vector_(2, 4.0,5.0); | 
					
						
							|  |  |  |   Vector v3 = Vector_(4, 6.0,7.0,8.0,9.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   vector<size_t> dims(3); dims[0]=3; dims[1]=2; dims[2]=4; | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   VectorValues combined(dims); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   combined[0] = v1; | 
					
						
							|  |  |  |   combined[1] = v2; | 
					
						
							|  |  |  |   combined[2] = v3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Permutation perm1(3); | 
					
						
							|  |  |  |   perm1[0] = 1; | 
					
						
							|  |  |  |   perm1[1] = 2; | 
					
						
							|  |  |  |   perm1[2] = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Permutation perm2(3); | 
					
						
							|  |  |  |   perm2[0] = 1; | 
					
						
							|  |  |  |   perm2[1] = 2; | 
					
						
							|  |  |  |   perm2[2] = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Permuted<VectorValues> permuted1(combined); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   CHECK(assert_equal(v1, permuted1[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[2])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted1.permute(perm1); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted1[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[1])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted1.permute(perm2); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted1[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[0])) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Permuted<VectorValues> permuted2(perm1, combined); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   CHECK(assert_equal(v1, permuted2[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted2[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted2[1])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted2.permute(perm2); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted2[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted2[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted2[0])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-11 12:30:20 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  | TEST(VectorValues, permuted_incremental) { | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   Vector v1 = Vector_(3, 1.0,2.0,3.0); | 
					
						
							|  |  |  |   Vector v2 = Vector_(2, 4.0,5.0); | 
					
						
							|  |  |  |   Vector v3 = Vector_(4, 6.0,7.0,8.0,9.0); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   VectorValues incremental; | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   incremental.reserve(3, 9); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v1); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v2); | 
					
						
							|  |  |  |   incremental.push_back_preallocated(v3); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Permutation perm1(3); | 
					
						
							|  |  |  |   perm1[0] = 1; | 
					
						
							|  |  |  |   perm1[1] = 2; | 
					
						
							|  |  |  |   perm1[2] = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Permutation perm2(3); | 
					
						
							|  |  |  |   perm2[0] = 1; | 
					
						
							|  |  |  |   perm2[1] = 2; | 
					
						
							|  |  |  |   perm2[2] = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Permuted<VectorValues> permuted1(incremental); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   CHECK(assert_equal(v1, permuted1[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[2])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted1.permute(perm1); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted1[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[1])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted1.permute(perm2); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted1[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted1[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted1[0])) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-09 11:09:58 +08:00
										 |  |  |   Permuted<VectorValues> permuted2(perm1, incremental); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  |   CHECK(assert_equal(v1, permuted2[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted2[0])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted2[1])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   permuted2.permute(perm2); | 
					
						
							|  |  |  |   CHECK(assert_equal(v1, permuted2[1])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v2, permuted2[2])) | 
					
						
							|  |  |  |   CHECK(assert_equal(v3, permuted2[0])) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main() { | 
					
						
							| 
									
										
										
										
											2010-10-11 12:30:20 +08:00
										 |  |  |   TestResult tr; return TestRegistry::runAllTests(tr); | 
					
						
							| 
									
										
										
										
											2010-10-09 06:04:47 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2010-10-11 12:30:20 +08:00
										 |  |  | /* ************************************************************************* */ |