From 80777b293f5cc3eefd46c7c8fabe950bd813cb87 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 8 May 2013 15:17:13 -0400 Subject: [PATCH] rewrite testPVScalarArray --- testApp/pv/Makefile | 5 +- testApp/pv/testPVScalarArray.cpp | 463 +++++++++---------------------- 2 files changed, 132 insertions(+), 336 deletions(-) diff --git a/testApp/pv/Makefile b/testApp/pv/Makefile index 558e4c0..b93d140 100644 --- a/testApp/pv/Makefile +++ b/testApp/pv/Makefile @@ -34,9 +34,10 @@ PROD_HOST += testConvert testConvert_SRCS += testConvert.cpp testConvert_LIBS += pvData Com -PROD_HOST += testPVScalarArray +TESTPROD += testPVScalarArray testPVScalarArray_SRCS += testPVScalarArray.cpp testPVScalarArray_LIBS += pvData Com +TESTS += testPVScalarArray PROD_HOST += testPVStructureArray testPVStructureArray_SRCS += testPVStructureArray.cpp @@ -46,6 +47,8 @@ PROD_HOST += testOperators testOperators_SRCS += testOperators.cpp testOperators_LIBS += pvData Com +TESTSCRIPTS_HOST += $(TESTS:%=%.t) + include $(TOP)/configure/RULES #---------------------------------------- # ADD RULES AFTER THIS LINE diff --git a/testApp/pv/testPVScalarArray.cpp b/testApp/pv/testPVScalarArray.cpp index e709831..f4c24cb 100644 --- a/testApp/pv/testPVScalarArray.cpp +++ b/testApp/pv/testPVScalarArray.cpp @@ -14,6 +14,8 @@ #include #include +#include +#include #include #include @@ -25,352 +27,143 @@ using namespace epics::pvData; using std::tr1::static_pointer_cast; -static bool debug = false; +namespace { -static FieldCreatePtr fieldCreate = getFieldCreate(); -static PVDataCreatePtr pvDataCreate = getPVDataCreate(); -static StandardFieldPtr standardField = getStandardField(); -static StandardPVFieldPtr standardPVField = getStandardPVField(); -static ConvertPtr convert = getConvert(); -static String builder; -static String alarmTimeStamp("alarm,timeStamp"); -static String alarmTimeStampValueAlarm("alarm,timeStamp,valueAlarm"); -static String allProperties("alarm,timeStamp,display,control,valueAlarm"); -static FILE * fd = NULL; -static size_t length = 4; - -static void byteArray() +static void testFactory() { - if(debug) fprintf(fd,"\nbyteArray\n"); - PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvByte);; - PVByteArrayPtr pvByteArray = static_pointer_cast(pvScalarArray); - ByteArray value; - value.reserve(length); - int8 xxx = 0x7f; - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvByteArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromByteArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvByteArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - ByteArrayData data; - pvByteArray->get(0,length,data); - ByteArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%d ",*iter); + testDiag("Check array creation"); + + for(ScalarType e=pvBoolean; e<=pvString; e=(ScalarType)(1+(int)e)) + { + testDiag("Check type %s", ScalarTypeFunc::name(e)); + PVScalarArrayPtr arr = getPVDataCreate()->createPVScalarArray(e); + testOk1(arr.get()!=NULL); + if(!arr.get()) + continue; + testOk1(arr->getScalarArray()->getElementType()==e); + testOk1(arr->getLength()==0); + arr->setLength(10); + testOk1(arr->getLength()==10); + testOk1(arr->getCapacity()>=10); + arr->setLength(0); + testOk1(arr->getLength()==0); } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - int8 * pdata = get(data.data); - for(size_t i=0; i +struct basicTestData { + static inline void fill(typename PVT::svector& data) { + data.resize(100); + for(typename PVT::value_type i=0; + (size_t)i +struct basicTestData { + static inline void fill(PVStringArray::svector& data) { + PVIntArray::svector idata; + basicTestData::fill(idata); + data.resize(idata.size()); + castUnsafeV(data.size(), pvString, data.data(), pvInt, idata.data()); + } +}; + +template +static void testBasic() { - if(debug) fprintf(fd,"\nubyteArray\n"); - PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvUByte);; - PVUByteArrayPtr pvUByteArray = static_pointer_cast(pvScalarArray); - UByteArray value; - value.reserve(length); - uint8 xxx = 0x7f; - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvUByteArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromUByteArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvUByteArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - UByteArrayData data; - pvUByteArray->get(0,length,data); - UByteArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%u ",*iter); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - uint8 * pdata = get(data.data); - for(size_t i=0; i(getPVDataCreate()->createPVScalarArray(PVT::typeCode)); + typename PVT::shared_pointer arr2 = static_pointer_cast(getPVDataCreate()->createPVScalarArray(PVT::typeCode)); + + testOk1(*arr1==*arr2); + testOk1(*arr1==*arr1); + testOk1(*arr1->getScalarArray()==*arr2->getScalarArray()); + + typename PVT::svector data; + data.reserve(200); + basicTestData::fill(data); + + testOk1(data.unique()); + arr1->replace(data); + testOk1(!data.unique()); + + testOk1(arr1->getLength()==data.size()); + + testOk1(*arr1!=*arr2); + + data.clear(); + + testOk1(arr1->viewUnsafe().unique()); + + arr2->assign(*arr1); + + testOk1(*arr1==*arr2); + testOk1(!arr1->viewUnsafe().unique()); + + arr2->swap(data); + + testOk1(arr2->getLength()==0); + testOk1(data.size()==arr1->getLength()); + + PVIntArray::svector idata; + arr1->PVScalarArray::getAs(idata); + + testOk1(idata[1]==10); + + idata.make_unique(); + idata[1] = 42; + + arr1->PVScalarArray::putFrom(idata); + + testOk1(castUnsafe(arr1->viewUnsafe()[1])==42); } -static void longArray() +static void testShare() { - if(debug) fprintf(fd,"\nlongArray\n"); - PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvLong);; - PVLongArrayPtr pvLongArray = static_pointer_cast(pvScalarArray); - LongArray value; - value.reserve(length); - int64 xxx = 0x7fffffffffffffffLL; - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvLongArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromLongArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvLongArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - LongArrayData data; - pvLongArray->get(0,length,data); - LongArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%lli ",(long long)*iter); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - int64 * pdata = get(data.data); - for(size_t i=0; i(getPVDataCreate()->createPVScalarArray(pvInt)); + PVStringArrayPtr sarr = static_pointer_cast(getPVDataCreate()->createPVScalarArray(pvString)); + + PVIntArray::svector idata(4, 1); + + sarr->PVScalarArray::putFrom(idata); // copy and convert + + testOk1(idata.unique()); + + iarr->PVScalarArray::putFrom(idata); // take a reference + + testOk1(!idata.unique()); + + idata.clear(); + + sarr->PVScalarArray::getAs(idata); // copy and convert + + testOk1(idata.unique()); + + iarr->PVScalarArray::getAs(idata); // take a reference + + testOk1(!idata.unique()); } -static void ulongArray() -{ - if(debug) fprintf(fd,"\nulongArray\n"); - PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvULong);; - PVULongArrayPtr pvULongArray = static_pointer_cast(pvScalarArray); - ULongArray value; - value.reserve(length); - uint64 xxx = 0x7fffffffffffffffLL; - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvULongArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromULongArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvULongArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - ULongArrayData data; - pvULongArray->get(0,length,data); - ULongArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%llu ",(long long unsigned)*iter); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - uint64 * pdata = get(data.data); - for(size_t i=0; icreatePVScalarArray(pvFloat);; - PVFloatArrayPtr pvFloatArray = static_pointer_cast(pvScalarArray); - FloatArray value; - value.reserve(length); - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvFloatArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromFloatArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvFloatArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - FloatArrayData data; - pvFloatArray->get(0,length,data); - FloatArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%f ",*iter); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - float * pdata = get(data.data); - for(size_t i=0; i(); + testBasic(); + testBasic(); + testBasic(); + testBasic(); + testShare(); + return testDone(); } - -static void doubleArray() -{ - if(debug) fprintf(fd,"\ndoubleArray\n"); - PVScalarArrayPtr pvScalarArray = pvDataCreate->createPVScalarArray(pvDouble);; - PVDoubleArrayPtr pvDoubleArray = static_pointer_cast(pvScalarArray); - DoubleArray value; - value.reserve(length); - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvDoubleArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromDoubleArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvDoubleArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - DoubleArrayData data; - pvDoubleArray->get(0,length,data); - DoubleArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - if(debug) fprintf(fd,"%lf ",*iter); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - double * pdata = get(data.data); - for(size_t i=0; icreatePVScalarArray(pvString);; - PVStringArrayPtr pvStringArray = static_pointer_cast(pvScalarArray); - StringArray value; - value.reserve(length); - for(size_t i = 0; iput(0,length,value,0); - builder.clear(); - pvStringArray->toString(&builder); - if(debug) fprintf(fd,"put\n%s\n",builder.c_str()); - convert->fromStringArray(pvScalarArray,0,length,value,0); - builder.clear(); - pvStringArray->toString(&builder); - if(debug) fprintf(fd,"convert\n%s\n",builder.c_str()); - StringArrayData data; - pvStringArray->get(0,length,data); - StringArray_iterator iter = data.data.begin(); - if(debug) fprintf(fd,"iter ["); - for(iter=data.data.begin();iter!=data.data.end();++iter) { - String val = *iter; - if(debug) fprintf(fd,"%s ",val.c_str()); - } - if(debug) fprintf(fd,"]\n"); - if(debug) fprintf(fd,"raw ["); - String* pdata = get(data.data); - for(size_t i=0; icreatePVScalarArray(pvDouble);; - PVDoubleArrayPtr pvDoubleArray = static_pointer_cast(pvScalarArray); - DoubleArray value; - value.reserve(length); - for(size_t i = 0; iput(0,length,value,0); - PVDoubleArrayPtr pvShareArray = static_pointer_cast( - pvDataCreate->createPVScalarArray(pvDouble)); - pvShareArray->shareData( - pvDoubleArray->getSharedVector(), - pvDoubleArray->getCapacity(), - pvDoubleArray->getLength()); - printf("pvDoubleArray->get() %p pvShareArray->get() %p\n",pvDoubleArray->get(),pvShareArray->get()); - printf("pvDoubleArray->getVector() %p pvShareArray->getVector() %p\n", - &(pvDoubleArray->getVector()),&(pvShareArray->getVector())); - printf("pvDoubleArray->getSharedVector() %p pvShareArray->getSharedVector() %p\n", - &(pvDoubleArray->getSharedVector()),&(pvShareArray->getSharedVector())); - assert(pvDoubleArray->get()==pvShareArray->get()); - builder.clear(); - pvShareArray->toString(&builder); - if(debug) fprintf(fd,"pvShare\n%s\n",builder.c_str()); - fprintf(fd,"shareArray PASSED\n"); -} - -int main(int argc,char *argv[]) -{ - char *fileName = 0; - if(argc>1) fileName = argv[1]; - fd = stdout; - if(fileName!=0 && fileName[0]!=0) { - fd = fopen(fileName,"w+"); - } - byteArray(); - ubyteArray(); - longArray(); - ulongArray(); - floatArray(); - doubleArray(); - stringArray(); - shareArray(); - return(0); -} -