Add better tests of the ResetHighWaterMark API
This commit is contained in:
1 parent
a5eddfcd63
commit
4886eaade8
2 files changed
+32
-2
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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<rsize/2; i++)
|
||||
epicsRingPointerPush(ring, int2ptr(i+1));
|
||||
testOk1(epicsRingPointerGetUsed(ring)==rsize/2);
|
||||
testOk1(epicsRingPointerGetHighWaterMark(ring)==rsize);
|
||||
epicsRingPointerResetHighWaterMark(ring);
|
||||
testOk1(epicsRingPointerGetHighWaterMark(ring)==rsize/2);
|
||||
while(epicsRingPointerPop(ring)) {} /* drain for following tests */
|
||||
testOk1(epicsRingPointerIsEmpty(ring));
|
||||
|
||||
testDiag("Fill it up again");
|
||||
for(i=2; i<2*rsize; i++) {
|
||||
int ret;
|
||||
@@ -255,7 +269,7 @@ MAIN(ringPointerTest)
|
||||
epicsThreadOpts opts = EPICS_THREAD_OPTS_INIT;
|
||||
epicsEventId stop = epicsEventMustCreate(epicsEventEmpty);
|
||||
|
||||
testPlan(42);
|
||||
testPlan(46);
|
||||
testSingle();
|
||||
/* testPair() needs to run with a priority > 0.
|
||||
* Start a new thread since main() is a "non-epics"
|
||||
|
||||
Reference in new issue
Block a user