From 08fc3cab38c700a171de894497e613b30029813e Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 15 Apr 2017 15:56:59 -0400 Subject: [PATCH] update testPVUnion --- testApp/pv/testPVUnion.cpp | 98 +++++++++++++++++++++++++++++++++++--- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/testApp/pv/testPVUnion.cpp b/testApp/pv/testPVUnion.cpp index 86b41e8..f4a1de8 100644 --- a/testApp/pv/testPVUnion.cpp +++ b/testApp/pv/testPVUnion.cpp @@ -27,8 +27,6 @@ using std::string; using std::cout; using std::endl; -static bool debug = false; - static FieldCreatePtr fieldCreate = getFieldCreate(); static PVDataCreatePtr pvDataCreate = getPVDataCreate(); static StandardFieldPtr standardField = getStandardField(); @@ -36,8 +34,7 @@ static StandardPVFieldPtr standardPVField = getStandardPVField(); static void testPVUnionType() { - if(debug) - std::cout << std::endl << "testPVUnion" << std::endl; + testDiag("testPVUnionType"); PVStructurePtr pvStructure = pvDataCreate->createPVStructure( standardField->regUnion( fieldCreate->createFieldBuilder()-> @@ -69,8 +66,7 @@ static void testPVUnionType() static void testPVUnionArray() { - if(debug) - std::cout << std::endl << "testPVUnion" << std::endl; + testDiag("testPVUnionArray"); PVStructurePtr pvStructure = pvDataCreate->createPVStructure( standardField->unionArray( fieldCreate->createFieldBuilder()-> @@ -111,12 +107,100 @@ static void testPVUnionArray() std::cout << "testPVUnionArray PASSED" << std::endl; } +static void testClearUnion() +{ + testDiag("testClearUnion w/ variant"); + + PVUnionPtr variant(pvDataCreate->createPVVariantUnion()); + + testOk(!variant->get(), "Initially empty"); + + variant->select(PVUnion::UNDEFINED_INDEX); + + testOk(!variant->get(), "Still empty"); + + { + PVFieldPtr bval(pvDataCreate->createPVScalar()); + variant->set(bval); + + testOk(variant->get().get()==bval.get(), "Now with bool"); + + variant->set(PVUnion::UNDEFINED_INDEX, PVFieldPtr()); + + testOk(!variant->get(), "Again empty"); + } + + { + PVFieldPtr bval(pvDataCreate->createPVScalar()); + variant->set(bval); + + testOk(variant->get().get()==bval.get(), "Now with bool"); + + variant->select(PVUnion::UNDEFINED_INDEX); + + testOk(!variant->get(), "Again empty"); + } + + testDiag("testClearUnion w/ discriminating"); + + PVUnionPtr discrim(pvDataCreate->createPVUnion( + fieldCreate->createFieldBuilder()-> + add("doubleValue", pvDouble)-> + add("intValue", pvInt)-> + add("timeStamp",standardField->timeStamp())-> + createUnion() + )); + + + testOk(!discrim->get(), "Initially empty"); + + discrim->select(PVUnion::UNDEFINED_INDEX); + + testOk(!discrim->get(), "Still empty"); + + { + PVFieldPtr bval(pvDataCreate->createPVScalar()); + + try { + discrim->set(bval); + testFail("set(bval) with UNDEFINED_INDEX didn't fail as expected"); + }catch (std::invalid_argument&){ + testPass("cause expected invalid_argument"); + } + + testOk(!discrim->get(), "Still empty"); + + discrim->select("doubleValue"); + discrim->set(bval); + + testOk(discrim->get().get()==bval.get(), "Now with bool"); + + discrim->set(PVUnion::UNDEFINED_INDEX, PVFieldPtr()); + + testOk(!discrim->get(), "Again empty"); + } + + { + PVFieldPtr bval(pvDataCreate->createPVScalar()); + + testOk(!discrim->get(), "Still empty"); + + discrim->set("doubleValue", bval); + + testOk(discrim->get().get()==bval.get(), "Now with bool"); + + discrim->set(PVUnion::UNDEFINED_INDEX, PVFieldPtr()); + + testOk(!discrim->get(), "Again empty"); + } +} MAIN(testPVUnion) { - testPlan(6); + testPlan(21); testPVUnionType(); testPVUnionArray(); + testClearUnion(); return testDone(); }