From 0f35d0c3f9d5e2c68655a47b4e7af4efe460d662 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Thu, 12 Mar 2020 13:59:41 -0500 Subject: [PATCH] Improve epicsEventTest delay checks --- modules/libcom/test/epicsEventTest.cpp | 33 ++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/modules/libcom/test/epicsEventTest.cpp b/modules/libcom/test/epicsEventTest.cpp index b3e48f8f2..c58e57c11 100644 --- a/modules/libcom/test/epicsEventTest.cpp +++ b/modules/libcom/test/epicsEventTest.cpp @@ -154,31 +154,34 @@ static void eventWakeupTest(void) } // extern "C" -static double eventWaitMeasureDelayError( const epicsEventId &id, const double & delay ) +static double eventWaitCheckDelayError( const epicsEventId &id, const double & delay ) { + epicsEventWaitWithTimeout ( id, 0.000001 ); + epicsTime beg = epicsTime::getMonotonic(); epicsEventWaitWithTimeout ( id, delay ); epicsTime end = epicsTime::getMonotonic(); double meas = end - beg; - double error = fabs ( delay - meas ); - testDiag("epicsEventWaitWithTimeout(%.6f) delay error %.6f sec", - delay, error ); - return error; + double error = meas - delay; + testOk(error >= 0, "epicsEventWaitWithTimeout(%.6f) delay error %.6f sec", + delay, error); + return fabs(error); } +#define WAITCOUNT 21 static void eventWaitTest() { - double errorSum = 0.0; - epicsEventId event = epicsEventMustCreate ( epicsEventEmpty ); - int i; - for ( i = 0u; i < 20; i++ ) { + epicsEventId event = epicsEventMustCreate(epicsEventEmpty); + double errorSum = eventWaitCheckDelayError(event, 0.0); + + for (int i = 0; i < WAITCOUNT - 1; i++) { double delay = ldexp ( 1.0 , -i ); - errorSum += eventWaitMeasureDelayError ( event, delay ); + errorSum += eventWaitCheckDelayError ( event, delay ); } - errorSum += eventWaitMeasureDelayError ( event, 0.0 ); - epicsEventDestroy ( event ); - double meanError = errorSum / ( i + 1 ); - testOk(meanError < 0.05, "Average error %.6f sec", meanError); + double meanError = errorSum / WAITCOUNT; + testOk(meanError < 0.05, "Mean delay error was %.6f sec", meanError); + + epicsEventDestroy(event); } @@ -190,7 +193,7 @@ MAIN(epicsEventTest) epicsEventId event; int status; - testPlan(13+SLEEPERCOUNT); + testPlan(13 + SLEEPERCOUNT + WAITCOUNT); event = epicsEventMustCreate(epicsEventEmpty);