- Timestamp:
- Jul 14, 2014, 8:37:03 PM (11 years ago)
- Children:
- ef9dff6
- Parents:
- e93bfe
- git-author:
- Frederik Heber <heber@…> (06/18/14 08:14:25)
- git-committer:
- Frederik Heber <heber@…> (07/14/14 20:37:03)
- Location:
- src
- Files:
-
- 4 edited
-
CodePatterns/Chronos.hpp (modified) (1 diff)
-
Helpers/Chronos.cpp (modified) (3 diffs)
-
Helpers/unittests/ChronosUnitTest.cpp (modified) (1 diff)
-
Helpers/unittests/ChronosUnitTest.hpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/CodePatterns/Chronos.hpp
re93bfe rca940b 95 95 double getCurrentTime() const; 96 96 97 typedef std::pair<size_t, size_t> sec_ncsec_t; 98 99 /** Returns the correct difference between split tuples (sec, nsec). 100 * 101 * \param _time1 first tuple 102 * \param _time2 second tuple 103 */ 104 static 105 double calculateCorrectTimeDifference( 106 const sec_ncsec_t &_time1, 107 const sec_ncsec_t &_time2); 108 97 109 //!> typedef for the map storing status of time keeping per token 98 110 typedef std::map<const std::string, double> TimerMap; -
src/Helpers/Chronos.cpp
re93bfe rca940b 102 102 } 103 103 104 double Chronos::calculateCorrectTimeDifference( 105 const sec_ncsec_t &_time1, 106 const sec_ncsec_t &_time2) 107 { 108 double currenttime = 0.; 109 if (_time1.second < _time2.second) 110 currenttime = (_time1.first - _time2.first - 1) 111 + (1e9 + _time1.second - _time2.second) * 1.e-9; 112 else 113 currenttime = (_time1.first - _time2.first) 114 + (_time1.second - _time2.second) * 1.e-9; 115 return currenttime; 116 } 117 104 118 double Chronos::getCurrentTime() const 105 119 { … … 108 122 timespec time1; 109 123 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); 110 double currenttime; 111 if (time1.tv_nsec < basetime.tv_nsec) 112 currenttime = (time1.tv_sec - basetime.tv_sec - 1) 113 + (basetime.tv_nsec - time1.tv_nsec) * 1.e-9; 114 else 115 currenttime = (time1.tv_sec - basetime.tv_sec) 116 + (time1.tv_nsec - basetime.tv_nsec) * 1.e-9; 124 double currenttime = calculateCorrectTimeDifference( 125 std::make_pair( time1.tv_sec, time1.tv_nsec), 126 std::make_pair( basetime.tv_sec, basetime.tv_nsec) 127 ); 117 128 #else 118 129 #ifdef HAVE_SYS_TIME_H … … 121 132 // gettimeofday gives microseconds accuracy 122 133 gettimeofday(&time1, &timezone1); 123 double currenttime; 124 if (time1.tv_usec < basetime.tv_usec) 125 currenttime = (time1.tv_sec - basetime.tv_sec - 1) 126 + (basetime.tv_usec - time1.tv_usec) * 1.e-6; 127 else 128 currenttime = (time1.tv_sec - basetime.tv_sec) 129 + (time1.tv_usec - basetime.tv_usec) * 1.e-6; 134 double currenttime = calculateCorrectTimeDifference( 135 std::make_pair( time1.tv_sec, time1.tv_usec), 136 std::make_pair( basetime.tv_sec, basetime.tv_usec) 137 ); 130 138 #else 131 139 #ifdef HAVE_SYS_TIMES_H 132 140 // clock is only accurate up to milliseconds 133 141 struct tms *buffer = new tms; 134 double currenttime;135 142 if (times(buffer) != (clock_t)(-1)) 136 143 currenttime = -
src/Helpers/unittests/ChronosUnitTest.cpp
re93bfe rca940b 152 152 std::cout << Chronos::getInstance() << std::endl; 153 153 } 154 155 /** 156 * UnitTest for Chronos::calculateCorrectTimeDifference() 157 */ 158 void ChronosTest::calculateCorrectTimeDifferenceTest() 159 { 160 Chronos::sec_ncsec_t first; 161 Chronos::sec_ncsec_t second; 162 { 163 // 1.1 - 0.01 164 first.first = 1; 165 first.second = 1e8; 166 second.first = 0; 167 second.second = 1e7; 168 double difference = Chronos::calculateCorrectTimeDifference(first, second); 169 CPPUNIT_ASSERT( fabs(1.1-0.01 - difference) < std::numeric_limits<double>::epsilon()*1e2); 170 // CPPUNIT_ASSERT_EQUAL( 1.1-0.01, difference); 171 } 172 { 173 // 1.1 - 0.9 174 first.first = 1; 175 first.second = 1e8; 176 second.first = 0; 177 second.second = 9e8; 178 double difference = Chronos::calculateCorrectTimeDifference(first, second); 179 // CPPUNIT_ASSERT_EQUAL( 1.1-0.9, difference); 180 CPPUNIT_ASSERT( fabs(1.1-0.9 - difference) < std::numeric_limits<double>::epsilon()*1e2); 181 } 182 { 183 // 1000.1 - 0.9 184 first.first = 1000; 185 first.second = 1e8; 186 second.first = 0; 187 second.second = 9e8; 188 double difference = Chronos::calculateCorrectTimeDifference(first, second); 189 // CPPUNIT_ASSERT_EQUAL( 1000.1-0.9, difference); 190 CPPUNIT_ASSERT( fabs(1000.1-0.9 - difference) < std::numeric_limits<double>::epsilon()*1e2); 191 } 192 } -
src/Helpers/unittests/ChronosUnitTest.hpp
re93bfe rca940b 21 21 CPPUNIT_TEST ( InstanceTest ); 22 22 CPPUNIT_TEST ( dummyTest ); 23 CPPUNIT_TEST ( calculateCorrectTimeDifferenceTest ); 23 24 CPPUNIT_TEST_SUITE_END(); 24 25 … … 29 30 void InstanceTest(); 30 31 void dummyTest(); 32 void calculateCorrectTimeDifferenceTest(); 31 33 }; 32 34
Note:
See TracChangeset
for help on using the changeset viewer.
