Add tests for NTScalarMultiChannel
This commit is contained in:
@ -24,6 +24,10 @@ TESTPROD_HOST += ntmultiChannelTest
|
||||
ntmultiChannelTest_SRCS += ntmultiChannelTest.cpp
|
||||
TESTS += ntmultiChannelTest
|
||||
|
||||
TESTPROD_HOST += ntscalarMultiChannelTest
|
||||
ntscalarMultiChannelTest_SRCS += ntscalarMultiChannelTest.cpp
|
||||
TESTS += ntscalarMultiChannelTest
|
||||
|
||||
TESTPROD_HOST += nttableTest
|
||||
nttableTest_SRCS = nttableTest.cpp
|
||||
TESTS += nttableTest
|
||||
|
179
test/nt/ntscalarMultiChannelTest.cpp
Normal file
179
test/nt/ntscalarMultiChannelTest.cpp
Normal file
@ -0,0 +1,179 @@
|
||||
/**
|
||||
* Copyright - See the COPYRIGHT that is included with this distribution.
|
||||
* EPICS pvDataCPP is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
*/
|
||||
/*
|
||||
* ntscalarMultiChannelTest.cpp
|
||||
*
|
||||
* Created on: 2015.08
|
||||
* Authors: Marty Kraimer, Dave Hickin
|
||||
*/
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <iostream>
|
||||
|
||||
#include <epicsUnitTest.h>
|
||||
#include <testMain.h>
|
||||
|
||||
|
||||
#include <pv/nt.h>
|
||||
#include <pv/sharedVector.h>
|
||||
#include <pv/ntscalarMultiChannel.h>
|
||||
|
||||
using namespace epics::pvData;
|
||||
using namespace epics::nt;
|
||||
using std::string;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
using std::vector;
|
||||
|
||||
static bool debug = false;
|
||||
|
||||
static FieldCreatePtr fieldCreate = getFieldCreate();
|
||||
static PVDataCreatePtr pvDataCreate = getPVDataCreate();
|
||||
static NTFieldPtr ntField = NTField::get();
|
||||
static PVNTFieldPtr pvntField = PVNTField::get();
|
||||
|
||||
static void test()
|
||||
{
|
||||
NTScalarMultiChannelBuilderPtr builder = NTScalarMultiChannel::createBuilder();
|
||||
testOk(builder.get() != 0, "Got builder");
|
||||
|
||||
NTScalarMultiChannelPtr multiChannel = builder->
|
||||
addDescriptor()->
|
||||
addAlarm()->
|
||||
addTimeStamp()->
|
||||
addSeverity() ->
|
||||
add("extra1",fieldCreate->createScalar(pvString)) ->
|
||||
add("extra2",fieldCreate->createScalarArray(pvString)) ->
|
||||
create();
|
||||
testOk1(multiChannel.get() != 0);
|
||||
|
||||
PVStructurePtr pvStructure = multiChannel->getPVStructure();
|
||||
testOk1(pvStructure.get()!=NULL);
|
||||
testOk1(NTScalarMultiChannel::is_a(pvStructure->getStructure()));
|
||||
size_t nchan = 3;
|
||||
shared_vector<string> names(nchan);
|
||||
names[0] = "channel 0";
|
||||
names[1] = "channel 1";
|
||||
names[2] = "channel 2";
|
||||
shared_vector<const string> channelNames(freeze(names));
|
||||
PVStringArrayPtr pvChannelName = multiChannel->getChannelName();
|
||||
pvChannelName->replace(channelNames);
|
||||
if(debug) {cout << *pvStructure << endl;}
|
||||
multiChannel = builder->
|
||||
value(pvDouble) ->
|
||||
addDescriptor()->
|
||||
addAlarm()->
|
||||
addTimeStamp()->
|
||||
addSeverity() ->
|
||||
create();
|
||||
testOk1(multiChannel.get() != 0);
|
||||
pvStructure = multiChannel->getPVStructure();
|
||||
if(debug) {cout << *pvStructure << endl;}
|
||||
pvChannelName = multiChannel->getChannelName();
|
||||
pvChannelName->replace(channelNames);
|
||||
PVDoubleArrayPtr pvValue = multiChannel->getValue<PVDoubleArray>();
|
||||
PVDoubleArray::svector doubles(nchan);
|
||||
doubles.resize(nchan);
|
||||
doubles[0] = 3.14159;
|
||||
doubles[1] = 2.71828;
|
||||
doubles[2] = 137.036;
|
||||
pvValue->replace(freeze(doubles));
|
||||
shared_vector<int32> severities(nchan);
|
||||
severities[0] = 0;
|
||||
severities[1] = 1;
|
||||
severities[2] = 2;
|
||||
PVIntArrayPtr pvSeverity = multiChannel->getSeverity();
|
||||
pvSeverity->replace(freeze(severities));
|
||||
if(debug) {cout << *pvStructure << endl;}
|
||||
PVBooleanArrayPtr pvIsConnected = multiChannel->getIsConnected();
|
||||
shared_vector<const epics::pvData::boolean> isConnected = pvIsConnected->view();
|
||||
multiChannel = builder->
|
||||
value(pvDouble) ->
|
||||
addDescriptor()->
|
||||
addAlarm()->
|
||||
addTimeStamp()->
|
||||
addSeverity() ->
|
||||
addStatus() ->
|
||||
addMessage() ->
|
||||
addSecondsPastEpoch() ->
|
||||
addNanoseconds() ->
|
||||
addUserTag() ->
|
||||
create();
|
||||
testOk1(multiChannel.get() != 0);
|
||||
pvStructure = multiChannel->getPVStructure();
|
||||
if(debug) {cout << *pvStructure << endl;}
|
||||
testOk1(NTScalarMultiChannel::isCompatible(pvStructure)==true);
|
||||
PVStructurePtr pvTimeStamp = multiChannel->getTimeStamp();
|
||||
testOk1(pvTimeStamp.get() !=0);
|
||||
PVStructurePtr pvAlarm = multiChannel->getAlarm();
|
||||
testOk1(pvAlarm.get() !=0);
|
||||
pvValue = multiChannel->getValue<PVDoubleArray>();
|
||||
testOk1(pvValue.get() !=0);
|
||||
pvChannelName = multiChannel->getChannelName();
|
||||
testOk1(pvChannelName.get() !=0);
|
||||
pvIsConnected = multiChannel->getIsConnected();
|
||||
testOk1(pvIsConnected.get() !=0);
|
||||
pvSeverity = multiChannel->getSeverity();
|
||||
testOk1(pvSeverity.get() !=0);
|
||||
PVIntArrayPtr pvStatus = multiChannel->getStatus();
|
||||
testOk1(pvStatus.get() !=0);
|
||||
PVStringArrayPtr pvMessage = multiChannel->getMessage();
|
||||
testOk1(pvMessage.get() !=0);
|
||||
PVLongArrayPtr pvSecondsPastEpoch = multiChannel->getSecondsPastEpoch();
|
||||
testOk1(pvSecondsPastEpoch.get() !=0);
|
||||
PVIntArrayPtr pvNanoseconds = multiChannel->getNanoseconds();
|
||||
testOk1(pvNanoseconds.get() !=0);
|
||||
PVIntArrayPtr pvUserTag = multiChannel->getUserTag();
|
||||
testOk1(pvUserTag.get() !=0);
|
||||
PVStringPtr pvDescriptor = multiChannel->getDescriptor();
|
||||
testOk1(pvDescriptor.get() !=0);
|
||||
}
|
||||
|
||||
|
||||
void test_wrap()
|
||||
{
|
||||
testDiag("test_wrap");
|
||||
|
||||
NTScalarMultiChannelPtr nullPtr = NTScalarMultiChannel::wrap(PVStructurePtr());
|
||||
testOk(nullPtr.get() == 0, "nullptr wrap");
|
||||
|
||||
nullPtr = NTScalarMultiChannel::wrap(
|
||||
getPVDataCreate()->createPVStructure(
|
||||
NTField::get()->createTimeStamp()
|
||||
)
|
||||
);
|
||||
testOk(nullPtr.get() == 0, "wrong type wrap");
|
||||
|
||||
|
||||
NTScalarMultiChannelBuilderPtr builder = NTScalarMultiChannel::createBuilder();
|
||||
testOk(builder.get() != 0, "Got builder");
|
||||
|
||||
PVStructurePtr pvStructure = builder->
|
||||
createPVStructure();
|
||||
testOk1(pvStructure.get() != 0);
|
||||
if (!pvStructure)
|
||||
return;
|
||||
|
||||
NTScalarMultiChannelPtr ptr = NTScalarMultiChannel::wrap(pvStructure);
|
||||
testOk(ptr.get() != 0, "wrap OK");
|
||||
|
||||
builder = NTScalarMultiChannel::createBuilder();
|
||||
ptr = NTScalarMultiChannel::wrapUnsafe(pvStructure);
|
||||
testOk(ptr.get() != 0, "wrapUnsafe OK");
|
||||
}
|
||||
|
||||
MAIN(testCreateRequest)
|
||||
{
|
||||
testPlan(25);
|
||||
test();
|
||||
test_wrap();
|
||||
return testDone();
|
||||
}
|
||||
|
Reference in New Issue
Block a user