#ifndef TESTTIMER_H
#define TESTTIMER_H

// simple class to measure time 

#include "TStopwatch.h"


namespace ROOT { 

  namespace Math{ 

    namespace test { 

#ifdef REPORT_TIME
      void reportTime( std::string s, double time); 
#endif

      void printTime(TStopwatch & time, std::string s) { 
	int pr = std::cout.precision(8);
	std::cout << s << "\t" << " time = " << time.RealTime() << "\t(sec)\t" 
	  //    << time.CpuTime() 
		  << std::endl;
	std::cout.precision(pr);
      }



      class Timer {

      public: 

	Timer(const std::string & s = "") : fName(s), fTime(0) 
	{
	  fWatch.Start();
	}
	Timer(double & t, const std::string & s = "") : fName(s), fTime(&t) 
	{
	  fWatch.Start();
	} 
	
	~Timer() { 
	  fWatch.Stop();
	  printTime(fWatch,fName);
#ifdef REPORT_TIME
	  // report time
	  reportTime(fName, fWatch.RealTime() );
#endif
	  if (fTime) *fTime += fWatch.RealTime();
	}


      private: 
	
	std::string fName;
	double * fTime; 
	TStopwatch fWatch; 
	
      }; 
    }

  }
}

#endif
