diff --git a/src/std/rec/test/Makefile b/src/std/rec/test/Makefile index 793312f9a..27bce8fcf 100644 --- a/src/std/rec/test/Makefile +++ b/src/std/rec/test/Makefile @@ -32,6 +32,13 @@ testHarness_SRCS += arrayOpTest.c TESTFILES += ../arrayOpTest.db TESTS += arrayOpTest +TESTPROD_HOST += recMiscTest +recMiscTest_SRCS += recMiscTest.c +recMiscTest_SRCS += recTestIoc_registerRecordDeviceDriver.cpp +testHarness_SRCS += recMiscTest.c +TESTFILES += ../recMiscTest.db +TESTS += recMiscTest + TESTPROD_HOST += linkRetargetLinkTest linkRetargetLinkTest_SRCS += linkRetargetLinkTest.c linkRetargetLinkTest_SRCS += recTestIoc_registerRecordDeviceDriver.cpp diff --git a/src/std/rec/test/epicsRunRecordTests.c b/src/std/rec/test/epicsRunRecordTests.c index 5612917cc..ab76a52a4 100644 --- a/src/std/rec/test/epicsRunRecordTests.c +++ b/src/std/rec/test/epicsRunRecordTests.c @@ -14,6 +14,7 @@ int analogMonitorTest(void); int compressTest(void); +int recMiscTest(void); int arrayOpTest(void); int asTest(void); int linkRetargetLinkTest(void); @@ -26,6 +27,8 @@ void epicsRunRecordTests(void) runTest(compressTest); + runTest(recMiscTest); + runTest(arrayOpTest); runTest(asTest); diff --git a/src/std/rec/test/recMiscTest.c b/src/std/rec/test/recMiscTest.c new file mode 100644 index 000000000..05de0e9d2 --- /dev/null +++ b/src/std/rec/test/recMiscTest.c @@ -0,0 +1,88 @@ +/*************************************************************************\ +* Copyright (c) 2017 Michael Davidsaver +* EPICS BASE is distributed subject to a Software License Agreement found +* in file LICENSE that is included with this distribution. +\*************************************************************************/ + +#include + +#include "dbAccess.h" +#include "errlog.h" +#include "dbStaticLib.h" +#include "dbUnitTest.h" +#include "testMain.h" + +static +void testint64BeforeInit(void) +{ + const char *S; + DBENTRY dbent; + + /* check dbGet/PutString */ + + testDiag("In %s", EPICS_FUNCTION); + + dbInitEntryFromRecord(testdbRecordPtr("out64"), &dbent); + if(dbFindField(&dbent, "VAL")) + testAbort("Failed to find out64.VAL"); + + S = dbGetString(&dbent); + testOk(S && strcmp(S, "0")==0, "initial value \"%s\"", S); + + testOk1(dbPutString(&dbent, "0x12345678abcdef00")==0); + + S = dbGetString(&dbent); + testOk(S && strcmp(S, "1311768467750121216")==0, "1311768467750121216 \"%s\"", S); + + dbFinishEntry(&dbent); +} + +static +void testint64AfterInit(void) +{ + testDiag("In %s", EPICS_FUNCTION); + + /* check dbGet/PutField and DB links */ + + testdbGetFieldEqual("in64", DBF_UINT64, 0llu); + testdbGetFieldEqual("out64", DBF_UINT64, 0x12345678abcdef00llu); + + testdbPutFieldOk("out64.PROC", DBF_LONG, 1); + + testdbGetFieldEqual("in64", DBF_UINT64, 0x12345678abcdef00llu); + + testdbPutFieldOk("out64.VAL", DBF_UINT64, 0x22345678abcdef00llu); + + testdbPutFieldOk("in64.PROC", DBF_LONG, 1); + + testdbGetFieldEqual("in64", DBF_UINT64, 0x22345678abcdef00llu); +} + +void recTestIoc_registerRecordDeviceDriver(struct dbBase *); + +MAIN(recMiscTest) +{ + testPlan(0); + + testdbPrepare(); + + testdbReadDatabase("recTestIoc.dbd", NULL, NULL); + + recTestIoc_registerRecordDeviceDriver(pdbbase); + + testdbReadDatabase("recMiscTest.db", NULL, NULL); + + testint64BeforeInit(); + + eltc(0); + testIocInitOk(); + eltc(1); + + testint64AfterInit(); + + testIocShutdownOk(); + + testdbCleanup(); + + return testDone(); +} diff --git a/src/std/rec/test/recMiscTest.db b/src/std/rec/test/recMiscTest.db new file mode 100644 index 000000000..46fc8ae11 --- /dev/null +++ b/src/std/rec/test/recMiscTest.db @@ -0,0 +1,10 @@ + +# check int64in/out + +record(int64in, "in64") { + field(INP , "out64 NPP") +} + +record(int64out, "out64") { + field(OUT , "in64 NPP") +}