diff --git a/testApp/copy/testPVCopy.cpp b/testApp/copy/testPVCopy.cpp index a2909d1..b874e7c 100644 --- a/testApp/copy/testPVCopy.cpp +++ b/testApp/copy/testPVCopy.cpp @@ -32,7 +32,7 @@ using namespace std; using std::tr1::static_pointer_cast; using namespace epics::pvData; -//static bool debug = true; +static bool debug = true; static void testPVScalar( String const & valueNameMaster, @@ -49,62 +49,68 @@ static void testPVScalar( size_t offset; ConvertPtr convert = getConvert(); - cout << endl; pvField = pvMaster->getSubField(valueNameMaster); pvValueMaster = static_pointer_cast(pvField); convert->fromDouble(pvValueMaster,.04); StructureConstPtr structure = pvCopy->getStructure(); builder.clear(); structure->toString(&builder); - cout << "structure from copy" << endl << builder << endl; + if(debug) { cout << "structure from copy" << endl << builder << endl; } pvStructureCopy = pvCopy->createPVStructure(); pvField = pvStructureCopy->getSubField(valueNameCopy); pvValueCopy = static_pointer_cast(pvField); bitSet = BitSetPtr(new BitSet(pvStructureCopy->getNumberFields())); pvCopy->initCopy(pvStructureCopy, bitSet); - cout << "after initCopy pvValueCopy " << convert->toDouble(pvValueCopy); - cout << endl; + if(debug) { cout << "after initCopy pvValueCopy " << convert->toDouble(pvValueCopy); } + if(debug) { cout << endl; } convert->fromDouble(pvValueMaster,.06); + testOk1(convert->toDouble(pvValueCopy)==.04); pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet); - cout << "after put(.06) pvValueCopy " << convert->toDouble(pvValueCopy); + testOk1(convert->toDouble(pvValueCopy)==.06); + testOk1(bitSet->get(pvValueCopy->getFieldOffset())); + if(debug) { cout << "after put(.06) pvValueCopy " << convert->toDouble(pvValueCopy); } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } offset = pvCopy->getCopyOffset(pvValueMaster); - cout << "getCopyOffset() " << offset; - cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset(); - cout << " pvValueMaster->getOffset() " << pvValueMaster->getFieldOffset(); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << "getCopyOffset() " << offset; } + if(debug) { cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset(); } + if(debug) { cout << " pvValueMaster->getOffset() " << pvValueMaster->getFieldOffset(); } + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } bitSet->clear(); convert->fromDouble(pvValueMaster,1.0); builder.clear(); bitSet->toString(&builder); - cout << "before updateCopyFromBitSet"; - cout << " masterValue " << convert->toDouble(pvValueMaster); - cout << " copyValue " << convert->toDouble(pvValueCopy); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << "before updateCopyFromBitSet"; } + if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); } + if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); } + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } bitSet->set(0); + testOk1(convert->toDouble(pvValueCopy)==0.06); pvCopy->updateCopyFromBitSet(pvStructureCopy,bitSet); - cout << "after updateCopyFromBitSet"; - cout << " masterValue " << convert->toDouble(pvValueMaster); - cout << " copyValue " << convert->toDouble(pvValueCopy); - cout << " bitSet " << builder; - cout << endl; + testOk1(convert->toDouble(pvValueCopy)==1.0); + if(debug) { cout << "after updateCopyFromBitSet"; } + if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); } + if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); } + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } convert->fromDouble(pvValueCopy,2.0); bitSet->set(0); - cout << "before updateMaster"; - cout << " masterValue " << convert->toDouble(pvValueMaster); - cout << " copyValue " << convert->toDouble(pvValueCopy); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << "before updateMaster"; } + if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); } + if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); } + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } + testOk1(convert->toDouble(pvValueMaster)==1.0); pvCopy->updateMaster(pvStructureCopy,bitSet); - cout << "after updateMaster"; - cout << " masterValue " << convert->toDouble(pvValueMaster); - cout << " copyValue " << convert->toDouble(pvValueCopy); - cout << " bitSet " << builder; - cout << endl; + testOk1(convert->toDouble(pvValueMaster)==2.0); + if(debug) { cout << "after updateMaster"; } + if(debug) { cout << " masterValue " << convert->toDouble(pvValueMaster); } + if(debug) { cout << " copyValue " << convert->toDouble(pvValueCopy); } + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } } static void testPVScalarArray( @@ -122,40 +128,45 @@ static void testPVScalarArray( size_t offset; size_t n = 5; shared_vector values(n); - cout << endl; + shared_vector cvalues; + pvValueMaster = pvMaster->getScalarArrayField(valueNameMaster,scalarType); for(size_t i=0; i xxx(freeze(values)); pvValueMaster->putFrom(xxx); StructureConstPtr structure = pvCopy->getStructure(); builder.clear(); structure->toString(&builder); - cout << "structure from copy" << endl << builder << endl; + if(debug) { cout << "structure from copy" << endl << builder << endl;} pvStructureCopy = pvCopy->createPVStructure(); pvValueCopy = pvStructureCopy->getScalarArrayField(valueNameCopy,scalarType); bitSet = BitSetPtr(new BitSet(pvStructureCopy->getNumberFields())); pvCopy->initCopy(pvStructureCopy, bitSet); builder.clear(); pvValueCopy->toString(&builder); - cout << "after initCopy pvValueCopy " << builder << endl; - cout << endl; + if(debug) { cout << "after initCopy pvValueCopy " << builder << endl; } + if(debug) { cout << endl; } values.resize(n); for(size_t i=0; i yyy(freeze(values)); pvValueMaster->putFrom(yyy); + pvValueCopy->getAs(cvalues); + testOk1(cvalues[0]==0.0); pvCopy->updateCopySetBitSet(pvStructureCopy,bitSet); + pvValueCopy->getAs(cvalues); + testOk1(cvalues[0]==0.06); builder.clear(); pvValueCopy->toString(&builder); - cout << "after put(i+ .06) pvValueCopy " << builder << endl; + if(debug) { cout << "after put(i+ .06) pvValueCopy " << builder << endl; } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } offset = pvCopy->getCopyOffset(pvValueMaster); - cout << "getCopyOffset() " << offset; - cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset(); - cout << " pvValueMaster->getOffset() " << pvValueMaster->getFieldOffset(); + if(debug) { cout << "getCopyOffset() " << offset; } + if(debug) { cout << " pvValueCopy->getOffset() " << pvValueCopy->getFieldOffset(); } + if(debug) { cout << " pvValueMaster->getOffset() " << pvValueMaster->getFieldOffset(); } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } bitSet->clear(); values.resize(n); for(size_t i=0; iputFrom(zzz); builder.clear(); bitSet->toString(&builder); - cout << "before updateCopyFromBitSet"; + if(debug) { cout << "before updateCopyFromBitSet"; } builder.clear(); pvValueMaster->toString(&builder); - cout << " masterValue " << builder << endl; + if(debug) { cout << " masterValue " << builder << endl; } builder.clear(); pvValueCopy->toString(&builder); - cout << " copyValue " << builder << endl; - cout << " bitSet " << builder; + if(debug) { cout << " copyValue " << builder << endl; } + if(debug) { cout << " bitSet " << builder; } builder.clear(); bitSet->toString(&builder); - cout << endl; + if(debug) { cout << endl; } bitSet->set(0); + pvValueCopy->getAs(cvalues); + testOk1(cvalues[0]==0.06); pvCopy->updateCopyFromBitSet(pvStructureCopy,bitSet); - cout << "after updateCopyFromBitSet"; + pvValueCopy->getAs(cvalues); + testOk1(cvalues[0]==1.0); + if(debug) { cout << "after updateCopyFromBitSet"; } builder.clear(); pvValueMaster->toString(&builder); - cout << " masterValue " << builder << endl; + if(debug) { cout << " masterValue " << builder << endl; } builder.clear(); pvValueCopy->toString(&builder); - cout << " copyValue " << builder << endl; + if(debug) { cout << " copyValue " << builder << endl; } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } values.resize(n); for(size_t i=0; i ttt(freeze(values)); pvValueMaster->putFrom(ttt); bitSet->set(0); - cout << "before updateMaster"; + if(debug) { cout << "before updateMaster"; } builder.clear(); pvValueMaster->toString(&builder); - cout << " masterValue " << builder << endl; + if(debug) { cout << " masterValue " << builder << endl; } builder.clear(); pvValueCopy->toString(&builder); - cout << " copyValue " << builder << endl; + if(debug) { cout << " copyValue " << builder << endl; } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } + pvValueMaster->getAs(cvalues); + testOk1(cvalues[0]==2.0); pvCopy->updateMaster(pvStructureCopy,bitSet); - cout << "after updateMaster"; + pvValueMaster->getAs(cvalues); + testOk1(cvalues[0]==1.0); + if(debug) { cout << "after updateMaster"; } builder.clear(); pvValueMaster->toString(&builder); - cout << " masterValue " << builder << endl; + if(debug) { cout << " masterValue " << builder << endl; } builder.clear(); pvValueCopy->toString(&builder); - cout << " copyValue " << builder << endl; + if(debug) { cout << " copyValue " << builder << endl; } builder.clear(); bitSet->toString(&builder); - cout << " bitSet " << builder; - cout << endl; + if(debug) { cout << " bitSet " << builder; } + if(debug) { cout << endl; } } static void scalarTest() { - cout << endl << endl << "****scalarTest****" << endl; + if(debug) { cout << endl << endl << "****scalarTest****" << endl; } PVStructurePtr pvMaster; String request; PVStructurePtr pvRequest; PVFieldPtr pvMasterField; PVCopyPtr pvCopy; - String builder; String valueNameMaster; String valueNameCopy; @@ -227,25 +245,24 @@ static void scalarTest() valueNameMaster = request = "value"; CreateRequest::shared_pointer createRequest = CreateRequest::create(); pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl; - cout << "pvRequest" << endl << builder; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); request = ""; valueNameMaster = "value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); request = "alarm,timeStamp,value"; valueNameMaster = "value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); @@ -253,7 +270,74 @@ static void scalarTest() static void arrayTest() { - cout << endl << endl << "****arrayTest****" << endl; + if(debug) { cout << endl << endl << "****arrayTest****" << endl; } + PVStructurePtr pvMaster; + String request; + PVStructurePtr pvRequest; + PVFieldPtr pvMasterField; + PVCopyPtr pvCopy; + String valueNameMaster; + String valueNameCopy; + + CreateRequest::shared_pointer createRequest = CreateRequest::create(); + StandardPVFieldPtr standardPVField = getStandardPVField(); + pvMaster = standardPVField->scalarArray(pvDouble,"alarm,timeStamp"); + valueNameMaster = request = "value"; + pvRequest = createRequest->createRequest(request); + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } + pvCopy = PVCopy::create(pvMaster,pvRequest,""); + valueNameCopy = "value"; + testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); + request = ""; + valueNameMaster = "value"; + pvRequest = createRequest->createRequest(request); + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } + pvCopy = PVCopy::create(pvMaster,pvRequest,""); + valueNameCopy = "value"; + testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); + request = "alarm,timeStamp,value"; + valueNameMaster = "value"; + pvRequest = createRequest->createRequest(request); + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } + pvCopy = PVCopy::create(pvMaster,pvRequest,""); + valueNameCopy = "value"; + testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); +} + +static PVStructurePtr createPowerSupply() +{ + FieldCreatePtr fieldCreate = getFieldCreate(); + StandardFieldPtr standardField = getStandardField(); + PVDataCreatePtr pvDataCreate = getPVDataCreate(); + + size_t nfields = 5; + StringArray names; + names.reserve(nfields); + FieldConstPtrArray powerSupply; + powerSupply.reserve(nfields); + names.push_back("alarm"); + powerSupply.push_back(standardField->alarm()); + names.push_back("timeStamp"); + powerSupply.push_back(standardField->timeStamp()); + String properties("alarm,display"); + names.push_back("voltage"); + powerSupply.push_back(standardField->scalar(pvDouble,properties)); + names.push_back("power"); + powerSupply.push_back(standardField->scalar(pvDouble,properties)); + names.push_back("current"); + powerSupply.push_back(standardField->scalar(pvDouble,properties)); + return pvDataCreate->createPVStructure( + fieldCreate->createStructure(names,powerSupply)); +} + + + +static void powerSupplyTest() +{ + if(debug) { cout << endl << endl << "****powerSupplyTest****" << endl; } PVStructurePtr pvMaster; String request; PVStructurePtr pvRequest; @@ -264,93 +348,46 @@ static void arrayTest() String valueNameCopy; CreateRequest::shared_pointer createRequest = CreateRequest::create(); - StandardPVFieldPtr standardPVField = getStandardPVField(); - pvMaster = standardPVField->scalarArray(pvDouble,"alarm,timeStamp"); - valueNameMaster = request = "value"; - pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl; - cout << "pvRequest" << endl << builder; - pvCopy = PVCopy::create(pvMaster,pvRequest,""); - valueNameCopy = "value"; - testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); - request = ""; - valueNameMaster = "value"; - pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; - pvCopy = PVCopy::create(pvMaster,pvRequest,""); - valueNameCopy = "value"; - testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); - request = "alarm,timeStamp,value"; - valueNameMaster = "value"; - pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; - pvCopy = PVCopy::create(pvMaster,pvRequest,""); - valueNameCopy = "value"; - testPVScalarArray(pvDouble,valueNameMaster,valueNameCopy,pvMaster,pvCopy); -} - -#ifdef XXXXXX -static void powerSupplyTest() -{ - cout << endl << endl << "****powerSupplyTest****" << endl; - RequesterPtr requester(new MyRequester("exampleTest")); - PowerSupplyPtr pvMaster; - String request; - PVStructurePtr pvRequest; - PVFieldPtr pvMasterField; - PVCopyPtr pvCopy; - String builder; - String valueNameMaster; - String valueNameCopy; - - CreateRequest::shared_pointer createRequest = CreateRequest::create(); - PVStructurePtr pv = createPowerSupply(); - pvMaster = PowerSupply::create("powerSupply",pv); + pvMaster = createPowerSupply(); valueNameMaster = request = "power.value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl; - cout << "pvRequest" << endl << builder; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "power.value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); request = ""; valueNameMaster = "power.value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "power.value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); request = "alarm,timeStamp,voltage.value,power.value,current.value"; valueNameMaster = "power.value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "power.value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); request = "alarm,timeStamp,voltage{value,alarm},power{value,alarm,display},current.value"; valueNameMaster = "power.value"; pvRequest = createRequest->createRequest(request); - builder.clear(); pvRequest->toString(&builder); - cout << "request " << request << endl << "pvRequest" << endl << builder << endl; + if(debug) { cout << "request " << request << endl; } + if(debug) { cout << "pvRequest\n" << pvRequest->dumpValue(cout) << endl; } pvCopy = PVCopy::create(pvMaster,pvRequest,""); valueNameCopy = "power.value"; testPVScalar(valueNameMaster,valueNameCopy,pvMaster,pvCopy); - pvMaster->destroy(); } -#endif MAIN(testPVCopy) { - testPlan(0); + testPlan(67); scalarTest(); arrayTest(); -// powerSupplyTest(); + powerSupplyTest(); return testDone(); }