Salome HOME
the tests execution time is measured
[modules/hydro.git] / src / HYDRO_tests / TestLib_Listener.cxx
1 // Copyright (C) 2014-2015  EDF-R&D
2 // This library is free software; you can redistribute it and/or
3 // modify it under the terms of the GNU Lesser General Public
4 // License as published by the Free Software Foundation; either
5 // version 2.1 of the License, or (at your option) any later version.
6 //
7 // This library is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10 // Lesser General Public License for more details.
11 //
12 // You should have received a copy of the GNU Lesser General Public
13 // License along with this library; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
15 //
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
17 //
18
19 #include <TestLib_Listener.h>
20 #include <cppunit/Test.h>
21 #include <iostream>
22
23 #ifdef WIN32
24   #include <windows.h>
25 #endif
26
27 #ifdef WIN32
28 /**
29   Convert the given time structure to milliseconds number
30   @param theTime the time structure to convert
31   @return the calculated number of milliseconds
32 */
33 INT64 GetMilliseconds( const FILETIME& theTime )
34 {
35   SYSTEMTIME aTime;
36   FileTimeToSystemTime( &theTime, &aTime );
37   INT64 aRes = 0;
38   aRes += aTime.wHour * ( 3600 * 1000 );
39   aRes += aTime.wMinute * ( 60 * 1000 );
40   aRes += aTime.wSecond * ( 1000 );
41   aRes += aTime.wMilliseconds;
42   return aRes;
43 }
44 #endif
45
46 /**
47   Calculate the complete execution time for the current thread 
48   @return the calculated time as the number of milliseconds
49 */
50 INT64 GetTimeForCurrentThreadInMs()
51 {
52 #ifdef WIN32
53   FILETIME aCreationTime, anExitTime, aKernelTime, aUserTime;
54   GetThreadTimes( GetCurrentThread(), &aCreationTime, &anExitTime, &aKernelTime, &aUserTime );
55   INT64 aKernelMs = GetMilliseconds( aKernelTime );
56   INT64 aUserMs = GetMilliseconds( aUserTime );
57   return aKernelMs + aUserMs;
58 #else
59   struct timespec aTime;
60   clock_gettime( CLOCK_MONOTONIC, &aTime );
61   INT64 aSec = aTime.tv_sec;
62   aSec *= 1000;
63   aSec += aTime.tv_nsec / 1000000;
64   return aSec;
65 #endif
66 }
67
68 /**
69   \brief Constructor
70 */
71 TestLib_Listener::TestLib_Listener()
72 : myStart( 0 ), myComplete( 0 )
73 {
74 }
75
76 /**
77   \brief Destructor
78 */
79 TestLib_Listener::~TestLib_Listener()
80 {
81 }
82
83 /**
84   \brief Clear the internal state of the listener
85 */
86 void TestLib_Listener::Clear()
87 {
88   myStart = 0;
89   myComplete = 0;
90 }
91
92 /**
93   Get complete time of all tests execution in milliseconds
94   @return complete time in milliseconds
95 */
96 INT64 TestLib_Listener::GetCompleteTimeInMS() const
97 {
98   return myComplete;
99 }
100
101 /**
102   Handler for test start
103   @param theTest the started tests
104 */
105 void TestLib_Listener::startTest( CppUnit::Test* theTest )
106 {
107   std::string aName;
108   if( theTest )
109     aName = theTest->getName();
110
111   std::cout << aName << "...";
112   myStart = GetTimeForCurrentThreadInMs();
113 }
114
115 /**
116   Handler for test finish
117   @param theTest the finished tests
118 */
119 void TestLib_Listener::endTest( CppUnit::Test* theTest )
120 {
121   INT64 aCurTime = GetTimeForCurrentThreadInMs();
122   INT64 anExecTimeMS = aCurTime - myStart;
123   myComplete += anExecTimeMS;
124   std::cout << " " << anExecTimeMS << " ms" << std::endl;
125 }
126
127 /**
128   Handler for test suite start
129   @param theTest the started test suite
130 */
131 void TestLib_Listener::startSuite( CppUnit::Test* theTest )
132 {
133 }
134
135 /**
136   Handler for test suite finish
137   @param theTest the finished test suite
138 */
139 void TestLib_Listener::endSuite( CppUnit::Test* theTest )
140 {
141 }
142
143 /**
144   Handler for test failure
145   @param theFailure the failure information
146 */
147 void TestLib_Listener::addFailure( const CppUnit::TestFailure& theFailure )
148 {
149 }
150