| 
									
										
										
										
											2011-10-14 02:41:56 +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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  * -------------------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2011-10-14 11:23:14 +08:00
										 |  |  |  * @file testWrap.cpp | 
					
						
							|  |  |  |  * @brief Unit test for wrap.c | 
					
						
							|  |  |  |  * @author Frank Dellaert | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  |  **/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | #include <stdlib.h>
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #include <iostream>
 | 
					
						
							|  |  |  | #include <fstream>
 | 
					
						
							|  |  |  | #include <sstream>
 | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | #include <boost/assign/std/vector.hpp>
 | 
					
						
							| 
									
										
										
										
											2012-05-24 05:23:27 +08:00
										 |  |  | #include <boost/filesystem.hpp>
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #include <CppUnitLite/TestHarness.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <wrap/utilities.h>
 | 
					
						
							|  |  |  | #include <wrap/Module.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | using namespace std; | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | using namespace boost::assign; | 
					
						
							| 
									
										
										
										
											2011-12-03 00:43:15 +08:00
										 |  |  | using namespace wrap; | 
					
						
							| 
									
										
										
										
											2012-05-24 05:23:27 +08:00
										 |  |  | namespace fs = boost::filesystem; | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:37 +08:00
										 |  |  | static bool enable_verbose = false; | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #ifdef TOPSRCDIR
 | 
					
						
							|  |  |  | static string topdir = TOPSRCDIR; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:30 +08:00
										 |  |  | static string topdir = "TOPSRCDIR_NOT_CONFIGURED"; // If TOPSRCDIR is not defined, we error
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | typedef vector<string> strvec; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST( wrap, ArgumentList ) { | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	ArgumentList args; | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:09 +08:00
										 |  |  | 	Argument arg1; arg1.type = "double"; arg1.name = "x"; | 
					
						
							|  |  |  | 	Argument arg2; arg2.type = "double"; arg2.name = "y"; | 
					
						
							|  |  |  | 	Argument arg3; arg3.type = "double"; arg3.name = "z"; | 
					
						
							|  |  |  | 	args.push_back(arg1); | 
					
						
							|  |  |  | 	args.push_back(arg2); | 
					
						
							|  |  |  | 	args.push_back(arg3); | 
					
						
							|  |  |  | 	EXPECT(assert_equal("ddd", args.signature())); | 
					
						
							|  |  |  | 	EXPECT(assert_equal("double,double,double", args.types())); | 
					
						
							|  |  |  | 	EXPECT(assert_equal("x,y,z", args.names())); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST( wrap, check_exception ) { | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:37 +08:00
										 |  |  | 	THROWS_EXCEPTION(Module("/notarealpath", "geometry",enable_verbose)); | 
					
						
							|  |  |  | 	CHECK_EXCEPTION(Module("/alsonotarealpath", "geometry",enable_verbose), CantOpenFile); | 
					
						
							| 
									
										
										
										
											2011-12-08 01:55:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 	// clean out previous generated code
 | 
					
						
							| 
									
										
										
										
											2012-05-24 05:23:27 +08:00
										 |  |  |   fs::remove_all("actual_deps"); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	string path = topdir + "/wrap/tests"; | 
					
						
							| 
									
										
										
										
											2011-12-16 05:23:20 +08:00
										 |  |  | 	Module module(path.c_str(), "testDependencies",enable_verbose); | 
					
						
							| 
									
										
										
										
											2012-06-05 06:09:33 +08:00
										 |  |  | 	CHECK_EXCEPTION(module.matlab_code("mex", "actual_deps", "mexa64", "-O5"), DependencyMissing); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST( wrap, parse ) { | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | 	string header_path = topdir + "/wrap/tests"; | 
					
						
							|  |  |  | 	Module module(header_path.c_str(), "geometry",enable_verbose); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	EXPECT_LONGS_EQUAL(3, module.classes.size()); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | 	// check using declarations
 | 
					
						
							| 
									
										
										
										
											2012-05-05 03:14:58 +08:00
										 |  |  | 	strvec exp_using1, exp_using2; exp_using2 += "geometry"; | 
					
						
							| 
									
										
										
										
											2011-12-16 05:23:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// forward declarations
 | 
					
						
							| 
									
										
										
										
											2012-02-01 23:19:34 +08:00
										 |  |  | 	strvec exp_forward; exp_forward += "VectorNotEigen", "ns::OtherClass"; | 
					
						
							| 
									
										
										
										
											2011-12-16 05:23:20 +08:00
										 |  |  | 	EXPECT(assert_equal(exp_forward, module.forward_declarations)); | 
					
						
							| 
									
										
										
										
											2011-12-10 04:29:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	// check first class, Point2
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(0); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("Point2", cls.name)); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(2, cls.constructors.size()); | 
					
						
							| 
									
										
										
										
											2012-05-05 02:50:36 +08:00
										 |  |  | 		EXPECT_LONGS_EQUAL(7, cls.methods.size()); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 		EXPECT_LONGS_EQUAL(0, cls.static_methods.size()); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(0, cls.namespaces.size()); | 
					
						
							| 
									
										
										
										
											2012-05-05 03:14:58 +08:00
										 |  |  | 		EXPECT(assert_equal(exp_using1, cls.using_namespaces)); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 	// check second class, Point3
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(1); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("Point3", cls.name)); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(1, cls.constructors.size()); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(1, cls.methods.size()); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(2, cls.static_methods.size()); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 		EXPECT_LONGS_EQUAL(0, cls.namespaces.size()); | 
					
						
							| 
									
										
										
										
											2012-05-05 03:14:58 +08:00
										 |  |  | 		EXPECT(assert_equal(exp_using2, cls.using_namespaces)); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// first constructor takes 3 doubles
 | 
					
						
							|  |  |  | 		Constructor c1 = cls.constructors.front(); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(3, c1.args.size()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// check first double argument
 | 
					
						
							|  |  |  | 		Argument a1 = c1.args.front(); | 
					
						
							|  |  |  | 		EXPECT(!a1.is_const); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("double", a1.type)); | 
					
						
							|  |  |  | 		EXPECT(!a1.is_ref); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("x", a1.name)); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// check method
 | 
					
						
							|  |  |  | 		Method m1 = cls.methods.front(); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 		EXPECT(assert_equal("double", m1.returnVal.type1)); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("norm", m1.name)); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(0, m1.args.size()); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 		EXPECT(m1.is_const_); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | 	// Test class is the third one
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		LONGS_EQUAL(3, module.classes.size()); | 
					
						
							|  |  |  | 		Class testCls = module.classes.at(2); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL( 2, testCls.constructors.size()); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL(19, testCls.methods.size()); | 
					
						
							|  |  |  | 		EXPECT_LONGS_EQUAL( 0, testCls.static_methods.size()); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 		EXPECT_LONGS_EQUAL( 0, testCls.namespaces.size()); | 
					
						
							| 
									
										
										
										
											2012-05-05 03:14:58 +08:00
										 |  |  | 		EXPECT(assert_equal(exp_using2, testCls.using_namespaces)); | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | 		strvec exp_includes; exp_includes += "folder/path/to/Test.h"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, testCls.includes)); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// function to parse: pair<Vector,Matrix> return_pair (Vector v, Matrix A) const;
 | 
					
						
							|  |  |  | 		Method m2 = testCls.methods.front(); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 		EXPECT(m2.returnVal.isPair); | 
					
						
							|  |  |  | 		EXPECT(m2.returnVal.category1 == ReturnValue::EIGEN); | 
					
						
							|  |  |  | 		EXPECT(m2.returnVal.category2 == ReturnValue::EIGEN); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:07 +08:00
										 |  |  | TEST( wrap, parse_namespaces ) { | 
					
						
							|  |  |  | 	string header_path = topdir + "/wrap/tests"; | 
					
						
							|  |  |  | 	Module module(header_path.c_str(), "testNamespaces",enable_verbose); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:08 +08:00
										 |  |  | 	EXPECT_LONGS_EQUAL(6, module.classes.size()); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:11 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(0); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassA", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; exp_namespaces += "ns1"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += "path/to/ns1.h", ""; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(1); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassB", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; exp_namespaces += "ns1"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += "path/to/ns1.h", "path/to/ns1/ClassB.h"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(2); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassA", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; exp_namespaces += "ns2"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += "path/to/ns2.h", "path/to/ns2/ClassA.h"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(3); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassB", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; exp_namespaces += "ns2", "ns3"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += "path/to/ns2.h", "path/to/ns3.h", ""; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(4); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassC", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; exp_namespaces += "ns2"; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += "path/to/ns2.h", ""; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Class cls = module.classes.at(5); | 
					
						
							|  |  |  | 		EXPECT(assert_equal("ClassD", cls.name)); | 
					
						
							|  |  |  | 		strvec exp_namespaces; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_namespaces, cls.namespaces)); | 
					
						
							|  |  |  | 		strvec exp_includes; exp_includes += ""; | 
					
						
							|  |  |  | 		EXPECT(assert_equal(exp_includes, cls.includes)); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | TEST( wrap, matlab_code_namespaces ) { | 
					
						
							|  |  |  | 	string header_path = topdir + "/wrap/tests"; | 
					
						
							|  |  |  | 	Module module(header_path.c_str(), "testNamespaces",enable_verbose); | 
					
						
							|  |  |  | 	EXPECT_LONGS_EQUAL(6, module.classes.size()); | 
					
						
							|  |  |  | 	string path = topdir + "/wrap"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// clean out previous generated code
 | 
					
						
							| 
									
										
										
										
											2012-05-24 05:23:27 +08:00
										 |  |  |   fs::remove_all("actual_namespaces"); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// emit MATLAB code
 | 
					
						
							|  |  |  |   string exp_path = path + "/tests/expected_namespaces/"; | 
					
						
							|  |  |  |   string act_path = "actual_namespaces/"; | 
					
						
							| 
									
										
										
										
											2012-06-05 06:09:33 +08:00
										 |  |  | 	module.matlab_code("mex", "actual_namespaces", "mexa64", "-O5"); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:14 +08:00
										 |  |  | 	EXPECT(files_equal(exp_path + "new_ClassD_.cpp"              , act_path + "new_ClassD_.cpp"              )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ClassD_.m"                , act_path + "new_ClassD_.m"                )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns1ClassA_.cpp"           , act_path + "new_ns1ClassA_.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns1ClassA_.m"             , act_path + "new_ns1ClassA_.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns1ClassB_.cpp"           , act_path + "new_ns1ClassB_.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns1ClassB_.m"             , act_path + "new_ns1ClassB_.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ClassA_.cpp"           , act_path + "new_ns2ClassA_.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ClassA_.m"             , act_path + "new_ns2ClassA_.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ClassC_.cpp"           , act_path + "new_ns2ClassC_.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ClassC_.m"             , act_path + "new_ns2ClassC_.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.cpp"        , act_path + "new_ns2ns3ClassB_.cpp"        )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "new_ns2ns3ClassB_.m"          , act_path + "new_ns2ns3ClassB_.m"          )); | 
					
						
							| 
									
										
										
										
											2012-03-31 02:06:58 +08:00
										 |  |  | 	EXPECT(files_equal(exp_path + "delete_ClassD.cpp"              , act_path + "delete_ClassD.cpp"              )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ClassD.m"                , act_path + "delete_ClassD.m"                )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns1ClassA.cpp"           , act_path + "delete_ns1ClassA.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns1ClassA.m"             , act_path + "delete_ns1ClassA.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns1ClassB.cpp"           , act_path + "delete_ns1ClassB.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns1ClassB.m"             , act_path + "delete_ns1ClassB.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ClassA.cpp"           , act_path + "delete_ns2ClassA.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ClassA.m"             , act_path + "delete_ns2ClassA.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ClassC.cpp"           , act_path + "delete_ns2ClassC.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ClassC.m"             , act_path + "delete_ns2ClassC.m"             )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ns3ClassB.cpp"        , act_path + "delete_ns2ns3ClassB.cpp"        )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "delete_ns2ns3ClassB.m"          , act_path + "delete_ns2ns3ClassB.m"          )); | 
					
						
							| 
									
										
										
										
											2011-12-16 03:39:14 +08:00
										 |  |  | 	EXPECT(files_equal(exp_path + "ns2ClassA_afunction.cpp"      , act_path + "ns2ClassA_afunction.cpp"      )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "ns2ClassA_afunction.m"        , act_path + "ns2ClassA_afunction.m"        )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/memberFunction.cpp", act_path + "@ns2ClassA/memberFunction.cpp")); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/memberFunction.m"  , act_path + "@ns2ClassA/memberFunction.m"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/ns2ClassA.m"       , act_path + "@ns2ClassA/ns2ClassA.m"       )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/nsArg.cpp"         , act_path + "@ns2ClassA/nsArg.cpp"         )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/nsArg.m"           , act_path + "@ns2ClassA/nsArg.m"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/nsReturn.cpp"      , act_path + "@ns2ClassA/nsReturn.cpp"      )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "@ns2ClassA/nsReturn.m"        , act_path + "@ns2ClassA/nsReturn.m"        )); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:13 +08:00
										 |  |  | 	EXPECT(files_equal(exp_path + "make_testNamespaces.m", act_path + "make_testNamespaces.m")); | 
					
						
							|  |  |  | 	EXPECT(files_equal(exp_path + "Makefile"       , act_path + "Makefile"       )); | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:07 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | TEST( wrap, matlab_code ) { | 
					
						
							|  |  |  | 	// Parse into class object
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:51:05 +08:00
										 |  |  | 	string header_path = topdir + "/wrap/tests"; | 
					
						
							|  |  |  | 	Module module(header_path,"geometry",enable_verbose); | 
					
						
							|  |  |  | 	string path = topdir + "/wrap"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// clean out previous generated code
 | 
					
						
							| 
									
										
										
										
											2012-05-24 05:23:27 +08:00
										 |  |  |   fs::remove_all("actual"); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// emit MATLAB code
 | 
					
						
							|  |  |  | 	// make_geometry will not compile, use make testwrap to generate real make
 | 
					
						
							| 
									
										
										
										
											2012-06-05 06:09:33 +08:00
										 |  |  | 	module.matlab_code("mex", "actual", "mexa64", "-O5"); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Point2/Point2.m"  , "actual/@Point2/Point2.m"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Point2/x.cpp"     , "actual/@Point2/x.cpp"     )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Point3/Point3.m"  , "actual/@Point3/Point3.m"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/new_Point3_ddd.m"  , "actual/new_Point3_ddd.m"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/new_Point3_ddd.cpp", "actual/new_Point3_ddd.cpp")); | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:30 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/Point3_staticFunction.m"  , "actual/Point3_staticFunction.m"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/Point3_staticFunction.cpp", "actual/Point3_staticFunction.cpp")); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Point3/norm.m"    , "actual/@Point3/norm.m"    )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Point3/norm.cpp"  , "actual/@Point3/norm.cpp"  )); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/new_Test_.cpp"           , "actual/new_Test_.cpp"           )); | 
					
						
							| 
									
										
										
										
											2012-03-31 02:06:58 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/delete_Test.cpp"           , "actual/delete_Test.cpp"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/delete_Test.m"           , "actual/delete_Test.m"           )); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/Test.m"            , "actual/@Test/Test.m"            )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_string.cpp" , "actual/@Test/return_string.cpp" )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_pair.cpp"   , "actual/@Test/return_pair.cpp"   )); | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:33 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/create_MixedPtrs.cpp", "actual/@Test/create_MixedPtrs.cpp")); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_field.cpp"  , "actual/@Test/return_field.cpp"  )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_TestPtr.cpp", "actual/@Test/return_TestPtr.cpp")); | 
					
						
							| 
									
										
										
										
											2011-12-07 11:05:33 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_Test.cpp"   , "actual/@Test/return_Test.cpp"   )); | 
					
						
							| 
									
										
										
										
											2011-12-02 06:06:03 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_Point2Ptr.cpp", "actual/@Test/return_Point2Ptr.cpp")); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/return_ptrs.cpp"   , "actual/@Test/return_ptrs.cpp"   )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/print.m"           , "actual/@Test/print.m"           )); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/@Test/print.cpp"         , "actual/@Test/print.cpp"         )); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-12-09 04:50:38 +08:00
										 |  |  | 	EXPECT(files_equal(path + "/tests/expected/make_geometry.m", "actual/make_geometry.m")); | 
					
						
							|  |  |  | 	EXPECT(files_equal(path + "/tests/expected/Makefile"       , "actual/Makefile"       )); | 
					
						
							| 
									
										
										
										
											2011-10-14 02:41:56 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ************************************************************************* */ | 
					
						
							|  |  |  | int main() { TestResult tr; return TestRegistry::runAllTests(tr); } | 
					
						
							|  |  |  | /* ************************************************************************* */ |