diff --git a/modules/libcom/test/ringBytesTest.c b/modules/libcom/test/ringBytesTest.c index c81e466ac..5bd730567 100644 --- a/modules/libcom/test/ringBytesTest.c +++ b/modules/libcom/test/ringBytesTest.c @@ -60,7 +60,7 @@ MAIN(ringBytesTest) char get[RINGSIZE+1]; epicsRingBytesId ring; - testPlan(292); + testPlan(314); pinfo = calloc(1,sizeof(info)); if (!pinfo) { @@ -99,6 +99,8 @@ MAIN(ringBytesTest) n = epicsRingBytesPut(ring, put+RINGSIZE, 1); testOk(n==0, "put to full ring"); check(ring, 0, RINGSIZE); + epicsRingBytesResetHighWaterMark(ring); + check(ring, 0, RINGSIZE); for(i = 0 ; i < RINGSIZE ; i++) { n = epicsRingBytesGet(ring, get+i, 1); testOk(n==1, "ring get 1, %d", i); @@ -124,6 +126,20 @@ MAIN(ringBytesTest) testOk(n==1, "ring get %d", 1); check(ring, RINGSIZE, 1); + /* Reset must lower a grown mark to the current non-zero usage. + * Fill the ring (mark -> RINGSIZE), drain half so usage < mark, + * then reset and confirm the mark drops to the half that remains. + */ + epicsRingBytesResetHighWaterMark(ring); + n = epicsRingBytesPut(ring, put, RINGSIZE); + testOk(n==RINGSIZE, "ring put %d", RINGSIZE); + check(ring, 0, RINGSIZE); + n = epicsRingBytesGet(ring, get, RINGSIZE/2); + testOk(n==RINGSIZE/2, "ring get %d", RINGSIZE/2); + check(ring, RINGSIZE/2, RINGSIZE); + epicsRingBytesResetHighWaterMark(ring); + check(ring, RINGSIZE/2, RINGSIZE/2); + epicsRingBytesDelete(ring); epicsEventDestroy(consumerEvent); free(pinfo); diff --git a/modules/libcom/test/ringPointerTest.c b/modules/libcom/test/ringPointerTest.c index 987a881fd..077eae034 100644 --- a/modules/libcom/test/ringPointerTest.c +++ b/modules/libcom/test/ringPointerTest.c @@ -117,6 +117,20 @@ static void testSingle(void) testOk1(epicsRingPointerGetUsed(ring)==0); testOk1(epicsRingPointerGetHighWaterMark(ring)==rsize); + testDiag("Reset lowers a grown mark to the current non-zero usage"); + /* Mark is still rsize from the fill above; push half so that + * usage < mark, then reset and confirm the mark drops to usage + * (not to zero, not left unchanged, not the reversed complement). + */ + for(i=0; i 0. * Start a new thread since main() is a "non-epics"