From 46feb86a995399333424cdfb2dc5b4a3b8839eef Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 8 Jul 2013 11:28:05 -0400 Subject: [PATCH] test shared_vector_convert --- testApp/misc/testSharedVector.cpp | 47 ++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/testApp/misc/testSharedVector.cpp b/testApp/misc/testSharedVector.cpp index 8895124..edcd1d7 100644 --- a/testApp/misc/testSharedVector.cpp +++ b/testApp/misc/testSharedVector.cpp @@ -407,6 +407,50 @@ static void testNonPOD() testOk1(structs2[1].get()==temp); } +static void testVectorConvert() +{ + testDiag("Test shared_vector_convert"); + + epics::pvData::shared_vector ints(6, 42), moreints; + epics::pvData::shared_vector floats; + epics::pvData::shared_vector strings; + epics::pvData::shared_vector voids; + + testOk1(ints.unique()); + + // no-op convert. Just returns another reference + moreints = epics::pvData::shared_vector_convert(ints); + + testOk1(!ints.unique()); + moreints.clear(); + + // conversion when both types are known. + // returns a new vector + floats = epics::pvData::shared_vector_convert(ints); + + testOk1(ints.unique()); + testOk1(floats.size()==ints.size()); + testOk1(floats.at(0)==42.0); + + // convert to void is static_shared_vector_cast() + // returns a reference + voids = epics::pvData::shared_vector_convert(ints); + + testOk1(!ints.unique()); + testOk1(voids.size()==ints.size()*sizeof(int)); + + // convert from void uses shared_vector::original_type() + // to find that the actual type is 'int'. + // returns a new vector + strings = epics::pvData::shared_vector_convert(voids); + + voids.clear(); + + testOk1(ints.unique()); + testOk1(strings.size()==ints.size()); + testOk1(strings.at(0)=="42"); +} + static void testWeak() { testDiag("Test weak_ptr counting"); @@ -434,7 +478,7 @@ static void testWeak() MAIN(testSharedVector) { - testPlan(122); + testPlan(132); testDiag("Tests for shared_vector"); testDiag("sizeof(shared_vector)=%lu", @@ -450,6 +494,7 @@ MAIN(testSharedVector) testPush(); testVoid(); testNonPOD(); + testVectorConvert(); testWeak(); return testDone(); }