diff options
author | David Beck <david.beck@arm.com> | 2018-10-05 15:12:17 +0100 |
---|---|---|
committer | Matthew Bentham <matthew.bentham@arm.com> | 2018-10-10 16:16:58 +0100 |
commit | 152fb1cf5ef061b21fd3103e97ff8758815d21ea (patch) | |
tree | 1c68efaa87b3fb730ca85bdaa8d3da63ec2e49d1 /src/armnn/test | |
parent | 074f371bcd1d91c1f36b458d9ea1b050eafe5947 (diff) | |
download | armnn-152fb1cf5ef061b21fd3103e97ff8758815d21ea.tar.gz |
IVGCVSW-1975 : Remove boost::optional from the public interface
IVGCVSW-1964 : Optional to support passing references
Change-Id: I4bf8c264d1726aab7e417de5ffd7d04248332e54
Diffstat (limited to 'src/armnn/test')
-rw-r--r-- | src/armnn/test/OptionalTest.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
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 <boost/test/unit_test.hpp> #include <armnn/Optional.hpp> +#include <boost/optional.hpp> #include <string> +namespace +{ + +void PassStringRef(armnn::Optional<std::string&> value) +{ +} + +void PassStringRefWithDefault(armnn::Optional<std::string&> value = armnn::EmptyOptional()) +{ +} + +void BoostCompatibilityTester(const armnn::Optional<std::string>& 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<std::string&> optionalStringRef{armnn::EmptyOptional()}; + BOOST_TEST(optionalStringRef.has_value() == false); + + PassStringRef(optionalStringRef); + PassStringRefWithDefault(); + + armnn::Optional<std::string&> optionalStringRef2 = optionalStringRef; + + std::string helloWorld("Hello World"); + + std::string& helloWorldRef = helloWorld; + armnn::Optional<std::string&> optionalHelloRef = helloWorldRef; + BOOST_TEST(optionalHelloRef.has_value() == true); + BOOST_TEST(optionalHelloRef.value() == "Hello World"); + + armnn::Optional<std::string&> optionalHelloRef2 = helloWorld; + BOOST_TEST(optionalHelloRef2.has_value() == true); + BOOST_TEST(optionalHelloRef2.value() == "Hello World"); + + armnn::Optional<std::string&> optionalHelloRef3{helloWorldRef}; + BOOST_TEST(optionalHelloRef3.has_value() == true); + BOOST_TEST(optionalHelloRef3.value() == "Hello World"); + + armnn::Optional<std::string&> 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<std::string>(), false, ""); + BoostCompatibilityTester(armnn::Optional<std::string>("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<std::string> empty; + boost::optional<std::string> helloWorld("Hello World"); + + BoostCompatibilityTester(empty, false, ""); + BoostCompatibilityTester(helloWorld, true, "Hello World"); + + BoostCompatibilityTester(boost::optional<std::string>(), false, ""); + BoostCompatibilityTester(boost::optional<std::string>("Hello World"), true, "Hello World"); +} + BOOST_AUTO_TEST_CASE(SimpleIntTests) { const int intValue = 123; |