From 1e9826d1878a2a3cbbed38eea0fd1a1183213917 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Tue, 13 Feb 2018 15:36:21 +0100 Subject: [PATCH] add tests for calculated numeric soft events --- src/ioc/db/test/Makefile | 2 ++ src/ioc/db/test/devEventSoft.dbd | 1 + src/ioc/db/test/scanEventTest.c | 34 +++++++++++++++++++++++++------- src/ioc/db/test/scanEventTest.db | 11 +++++++++++ 4 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 src/ioc/db/test/devEventSoft.dbd diff --git a/src/ioc/db/test/Makefile b/src/ioc/db/test/Makefile index ec6b85673..77e485aec 100644 --- a/src/ioc/db/test/Makefile +++ b/src/ioc/db/test/Makefile @@ -144,7 +144,9 @@ scanEventTest_DBD += menuGlobal.dbd scanEventTest_DBD += menuConvert.dbd scanEventTest_DBD += menuScan.dbd scanEventTest_DBD += eventRecord.dbd +scanEventTest_DBD += devEventSoft.dbd scanEventTest_DBD += calcRecord.dbd +scanEventTest_DBD += dfanoutRecord.dbd TESTPROD_HOST += scanEventTest scanEventTest_SRCS += scanEventTest.c scanEventTest_SRCS += scanEventTest_registerRecordDeviceDriver.cpp diff --git a/src/ioc/db/test/devEventSoft.dbd b/src/ioc/db/test/devEventSoft.dbd new file mode 100644 index 000000000..ec3bc2d07 --- /dev/null +++ b/src/ioc/db/test/devEventSoft.dbd @@ -0,0 +1 @@ +device(event,CONSTANT,devEventSoft,"Soft Channel") diff --git a/src/ioc/db/test/scanEventTest.c b/src/ioc/db/test/scanEventTest.c index e48110bcc..9835b7bf8 100644 --- a/src/ioc/db/test/scanEventTest.c +++ b/src/ioc/db/test/scanEventTest.c @@ -35,14 +35,15 @@ const struct {char* name; int num;} events[] = { {"-NAN", 0}, {"-inf", 0}, {"inf", 0}, - {"info 1", -1}, - {" info 1 ", -1}, - {"-0.9", -2}, {"2", 2}, {"2.000000", 2}, {"2.5", 2}, {" 2.5 ", 2}, {"+0x02", 2}, + {"3", 3}, + {"info 1", -1}, + {" info 1 ", -1}, + {"-0.9", -2}, {"-2", -3}, {"-2.000000", -4}, {"-2.5", -5}, @@ -51,12 +52,13 @@ const struct {char* name; int num;} events[] = { MAIN(scanEventTest) { - unsigned int i; + int i, e; int aliases[512] ; int expected_count[512]; #define INDX(i) 256-events[i].num + #define MAXEV 5 - testPlan(NELEMENTS(events)*2); + testPlan(NELEMENTS(events)*2+(MAXEV+1)*5); memset(aliases, 0, sizeof(aliases)); memset(expected_count, 0, sizeof(expected_count)); @@ -75,6 +77,7 @@ MAIN(scanEventTest) testAbort("Error reading test database 'scanEventTest.db'"); } testIocInitOk(); + testDiag("Test if eventNameToHandle() strips spaces and handles numeric events"); for (i = 0; i < NELEMENTS(events); i++) { EVENTPVT pev = eventNameToHandle(events[i].name); /* test that some names are not events (num=0) */ @@ -103,13 +106,30 @@ MAIN(scanEventTest) } } } - post_event(events[i].num); + post_event(events[i].num); /* triggers numeric events only */ postEvent(pev); } + + testDiag("Check calculated numeric events (backward compatibility)"); + for (e = 0; e <= MAXEV; e++) { + testdbPutFieldOk("eventnum", DBR_LONG, e); + testdbGetFieldEqual("e1", DBR_LONG, e); + testdbGetFieldEqual("e2", DBR_LONG, e); + testdbPutFieldOk("e3", DBR_LONG, e); + testdbPutFieldOk("e3.PROC", DBR_LONG, 1); + if (e != 0) + for (i = 0; i < NELEMENTS(events); i++) + if (events[i].num == e) { + expected_count[INDX(i)]+=3; /* +1 for eventnum->e1, +1 for e2<-eventnum, +1 for e3 */ + break; + } + } + + testDiag("Check if events have been processed the expected number of times"); for (i = 0; i < NELEMENTS(events); i++) { char pvname[100]; sprintf(pvname, "c%d", i); - testDiag("Check if %s (event \"%s\") has processed %d times", pvname, events[i].name, expected_count[INDX(i)]); + testDiag("Event \"%s\" expected %d times", events[i].name, expected_count[INDX(i)]); testdbGetFieldEqual(pvname, DBR_LONG, expected_count[INDX(i)]); } diff --git a/src/ioc/db/test/scanEventTest.db b/src/ioc/db/test/scanEventTest.db index dbdb61f77..9118823d8 100644 --- a/src/ioc/db/test/scanEventTest.db +++ b/src/ioc/db/test/scanEventTest.db @@ -3,3 +3,14 @@ record(calc, "c$(N)") { field(EVNT, "$(EVENT)") field(CALC, "VAL+1") } +record(dfanout, "eventnum") { + field(OUTA, "e1 PP") + field(FLNK, "e2") +} +record(event, "e1") { +} +record(event, "e2") { + field(INP, "eventnum") +} +record(event, "e3") { +}