| 
									
										
										
										
											2014-11-30 18:09:34 +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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @file   testType.cpp | 
					
						
							|  |  |  |  * @brief  unit test for parsing a fully qualified type | 
					
						
							|  |  |  |  * @author Frank Dellaert | 
					
						
							|  |  |  |  * @date   Nov 30, 2014 | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <wrap/Qualified.h>
 | 
					
						
							|  |  |  | #include <CppUnitLite/TestHarness.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							|  |  |  | using namespace wrap; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-01 06:02:23 +08:00
										 |  |  | //******************************************************************************
 | 
					
						
							|  |  |  | TEST( Type, Constructor1 ) { | 
					
						
							|  |  |  |   Qualified actual("Point2"); | 
					
						
							|  |  |  |   EXPECT(actual.namespaces().empty()); | 
					
						
							|  |  |  |   EXPECT(actual.name()=="Point2"); | 
					
						
							|  |  |  |   EXPECT(actual.category==Qualified::CLASS); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //******************************************************************************
 | 
					
						
							|  |  |  | TEST( Type, Constructor2 ) { | 
					
						
							|  |  |  |   Qualified actual("Point3",Qualified::CLASS); | 
					
						
							|  |  |  |   EXPECT(actual.namespaces().empty()); | 
					
						
							|  |  |  |   EXPECT(actual.name()=="Point3"); | 
					
						
							|  |  |  |   EXPECT(actual.category==Qualified::CLASS); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  | //******************************************************************************
 | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  | TEST( Type, grammar ) { | 
					
						
							| 
									
										
										
										
											2014-11-30 18:24:12 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   using classic::space_p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-30 20:09:23 +08:00
										 |  |  |   // Create type grammar that will place result in actual
 | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  |   Qualified actual; | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   TypeGrammar type_g(actual); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   // a class type with 2 namespaces
 | 
					
						
							| 
									
										
										
										
											2014-11-30 18:19:23 +08:00
										 |  |  |   EXPECT(parse("gtsam::internal::Point2", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("gtsam","internal","Point2",Qualified::CLASS)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // a class type with 1 namespace
 | 
					
						
							|  |  |  |   EXPECT(parse("gtsam::Point2", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("gtsam","Point2",Qualified::CLASS)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:19:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // a class type with no namespaces
 | 
					
						
							|  |  |  |   EXPECT(parse("Point2", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("Point2",Qualified::CLASS)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-01 04:54:56 +08:00
										 |  |  |   // a class type with no namespaces
 | 
					
						
							|  |  |  |   EXPECT(parse("VectorNotEigen", type_g, space_p).full); | 
					
						
							|  |  |  |   EXPECT(actual==Qualified("VectorNotEigen",Qualified::CLASS)); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  |   // an Eigen type
 | 
					
						
							|  |  |  |   EXPECT(parse("Vector", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("Vector",Qualified::EIGEN)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:19:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // a basic type
 | 
					
						
							|  |  |  |   EXPECT(parse("double", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("double",Qualified::BASIS)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:19:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // void
 | 
					
						
							|  |  |  |   EXPECT(parse("void", type_g, space_p).full); | 
					
						
							| 
									
										
										
										
											2014-12-01 03:12:03 +08:00
										 |  |  |   EXPECT(actual==Qualified("void",Qualified::VOID)); | 
					
						
							| 
									
										
										
										
											2014-11-30 23:09:13 +08:00
										 |  |  |   actual.clear(); | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-01 18:32:33 +08:00
										 |  |  | //******************************************************************************
 | 
					
						
							|  |  |  | TEST( TypeList, grammar ) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   using classic::space_p; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Create type grammar that will place result in actual
 | 
					
						
							|  |  |  |   vector<Qualified> actual; | 
					
						
							| 
									
										
										
										
											2014-12-01 19:14:08 +08:00
										 |  |  |   TypeListGrammar<'{','}'> g(actual); | 
					
						
							| 
									
										
										
										
											2014-12-01 18:32:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{gtsam::Point2}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(1, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(0, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{char}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(1, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{unsigned char}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(1, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{Vector, Matrix}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(2, actual.size()); | 
					
						
							|  |  |  |   EXPECT(actual[0]==Qualified("Vector",Qualified::EIGEN)); | 
					
						
							|  |  |  |   EXPECT(actual[1]==Qualified("Matrix",Qualified::EIGEN)); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{Point2}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(1, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{Point2, Point3}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(2, actual.size()); | 
					
						
							|  |  |  |   EXPECT(actual[0]==Qualified("Point2")); | 
					
						
							|  |  |  |   EXPECT(actual[1]==Qualified("Point3")); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   EXPECT(parse("{gtsam::Point2}", g, space_p).full); | 
					
						
							|  |  |  |   EXPECT_LONGS_EQUAL(1, actual.size()); | 
					
						
							|  |  |  |   actual.clear(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-30 18:09:34 +08:00
										 |  |  | //******************************************************************************
 | 
					
						
							|  |  |  | int main() { | 
					
						
							|  |  |  |   TestResult tr; | 
					
						
							|  |  |  |   return TestRegistry::runAllTests(tr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | //******************************************************************************
 |