示例#1
0
	///Create a test harness that runs tests matching the substrings
	///passed on the command line. argc and argv are interpreted as if
	///they were the arguments to main.  If no substrings are given
	///(that is, no arguments are passed), all tests are run, as if one
	///argument of an empty string had been given.
	GTestHarness(int argc, char**argv)
	{
		//Make list of test names to match
 		if(argc < 2){
			m_testNameSubstr.push_back("");
		}else{
			for(int i = 1; i < argc; ++i){
				m_testNameSubstr.push_back(argv[i]);
			}
		}

		//Ready performance stats
		char buf[256];
		if(GApp::appPath(buf, 256, true) == -1)
			throw Ex("Failed to retrieve app path");
		if(chdir(buf) != 0)
			throw Ex("Failed to change the dir to the app folder");

		m_testTimes.flags(std::ios::showpoint | std::ios::skipws | std::ios::dec | std::ios::fixed | std::ios::left);
		m_testTimes.width(PERF_FILE_CHARS);
		m_testTimes.precision(PERF_FILE_CHARS - 3);
		string s;
		GTime::appendTimeStampValue(&s, "-", " ", ":", false);
		m_testTimes << s;
	}
	throw std::invalid_argument(Exception(String("joint waypoint text file must contain at least 2 'waypoint' vectors")));
      
      init(qs,times,deltas);
      
    }
    else { // output
      std::ostringstream out;
      
      // comment header
      out << "# Joint waypoint trajectory [joint positions & times (at-end)]" << std::endl;
      out << "# the following line should be 'absolute' for absolute qi's & t values or 'relative' if the vectors represent inter-waypoint deltas dqi's & dt" << std::endl;
      out << "absolute" << std::endl; // not "relative"
      out << "# q0 q1 ... qn t" << std::endl;
      std::ostream::fmtflags savedFlags = out.setf(std::ios_base::dec | std::ios_base::right);
      Int savedPrec = out.precision(10);
      Int savedWidth = out.width(13);
      const Int dof=qs[0].size();

// this is a hack, as under gcc the flags don't appear to stay set after an output op (!?)
#define setflags \
      out.setf(std::ios_base::dec | std::ios_base::right); \
      out.precision(10); \
      out.width(13); 

      setflags;
      for(Int i=0; i<qs.size(); i++) {
	Vector q(qs[i]);
	Time t(times[i]);
	
	for(Int e=0; e<dof; e++)
	  out << q[e] << " "; setflags;