From 152fb1cf5ef061b21fd3103e97ff8758815d21ea Mon Sep 17 00:00:00 2001 From: David Beck Date: Fri, 5 Oct 2018 15:12:17 +0100 Subject: IVGCVSW-1975 : Remove boost::optional from the public interface IVGCVSW-1964 : Optional to support passing references Change-Id: I4bf8c264d1726aab7e417de5ffd7d04248332e54 --- src/armnn/test/OptionalTest.cpp | 82 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'src') diff --git a/src/armnn/test/OptionalTest.cpp b/src/armnn/test/OptionalTest.cpp index 1b5aaa7db6..87fd156ece 100644 --- a/src/armnn/test/OptionalTest.cpp +++ b/src/armnn/test/OptionalTest.cpp @@ -5,8 +5,34 @@ #include #include +#include #include +namespace +{ + +void PassStringRef(armnn::Optional value) +{ +} + +void PassStringRefWithDefault(armnn::Optional value = armnn::EmptyOptional()) +{ +} + +void BoostCompatibilityTester(const armnn::Optional& optionalString, + bool hasValue, + const std::string& expectedValue) +{ + BOOST_TEST(optionalString.has_value() == hasValue); + if (hasValue) + { + BOOST_TEST(optionalString.value() == expectedValue); + } +} + +} + + BOOST_AUTO_TEST_SUITE(OptionalTests) BOOST_AUTO_TEST_CASE(SimpleStringTests) @@ -41,6 +67,62 @@ BOOST_AUTO_TEST_CASE(SimpleStringTests) BOOST_TEST(optionalString3.value() == "Hello World"); } + +BOOST_AUTO_TEST_CASE(StringRefTests) +{ + armnn::Optional optionalStringRef{armnn::EmptyOptional()}; + BOOST_TEST(optionalStringRef.has_value() == false); + + PassStringRef(optionalStringRef); + PassStringRefWithDefault(); + + armnn::Optional optionalStringRef2 = optionalStringRef; + + std::string helloWorld("Hello World"); + + std::string& helloWorldRef = helloWorld; + armnn::Optional optionalHelloRef = helloWorldRef; + BOOST_TEST(optionalHelloRef.has_value() == true); + BOOST_TEST(optionalHelloRef.value() == "Hello World"); + + armnn::Optional optionalHelloRef2 = helloWorld; + BOOST_TEST(optionalHelloRef2.has_value() == true); + BOOST_TEST(optionalHelloRef2.value() == "Hello World"); + + armnn::Optional optionalHelloRef3{helloWorldRef}; + BOOST_TEST(optionalHelloRef3.has_value() == true); + BOOST_TEST(optionalHelloRef3.value() == "Hello World"); + + armnn::Optional optionalHelloRef4{helloWorld}; + BOOST_TEST(optionalHelloRef4.has_value() == true); + BOOST_TEST(optionalHelloRef4.value() == "Hello World"); + + // modify through the optional reference + optionalHelloRef4.value().assign("Long Other String"); + BOOST_TEST(helloWorld == "Long Other String"); + BOOST_TEST(optionalHelloRef.value() == "Long Other String"); + BOOST_TEST(optionalHelloRef2.value() == "Long Other String"); + BOOST_TEST(optionalHelloRef3.value() == "Long Other String"); +} + +BOOST_AUTO_TEST_CASE(BoostCompatibilityTests) +{ + // sanity checks + BoostCompatibilityTester(armnn::Optional(), false, ""); + BoostCompatibilityTester(armnn::Optional("Hello World"), true, "Hello World"); + + // the real thing is to see that we can pass a boost::optional in place + // of an ArmNN Optional + boost::optional empty; + boost::optional helloWorld("Hello World"); + + BoostCompatibilityTester(empty, false, ""); + BoostCompatibilityTester(helloWorld, true, "Hello World"); + + BoostCompatibilityTester(boost::optional(), false, ""); + BoostCompatibilityTester(boost::optional("Hello World"), true, "Hello World"); +} + BOOST_AUTO_TEST_CASE(SimpleIntTests) { const int intValue = 123; -- cgit v1.2.1