diff --git a/src/libCom/test/epicsTimeTest.cpp b/src/libCom/test/epicsTimeTest.cpp index 3c2c6128c..2bd26c153 100644 --- a/src/libCom/test/epicsTimeTest.cpp +++ b/src/libCom/test/epicsTimeTest.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "epicsTime.h" #include "epicsThread.h" @@ -19,6 +20,11 @@ extern "C" { int epicsTimeTest (void); } +struct l_fp { /* NTP time stamp */ + epicsUInt32 l_ui; /* sec past NTP epoch */ + epicsUInt32 l_uf; /* fractional seconds */ +}; + epicsTime useSomeCPU; void testStringConversion() @@ -59,6 +65,17 @@ int epicsTimeTest (void) gm_tm_nano_sec ansiDateGMT; unsigned long nanoSec; + { + epicsTime tsi = epicsTime::getCurrent (); + l_fp ntp = tsi; + epicsTime tsf = ntp; + const double diff = fabs ( tsf - tsi ); + // the difference in the precision of the two time formats + static const double precisionNTP = 1.0 / ( 1.0 + UINT_MAX ); + static const double precisionEPICS = 1.0 / epicsTime::nSecPerSec; + assert ( diff <= precisionEPICS + precisionNTP ); + } + printf ("epicsTime Test (%3d loops)\n========================\n\n", nTimes); for (int iTimes=0; iTimes < nTimes; ++iTimes) {