blob: 3f4c02d56ffa518f331fc3965b20b4b97d595367 [file] [log] [blame]
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include <boost/test/unit_test.hpp>
#include <armnn/Optional.hpp>
#include <string>
namespace
{
void PassStringRef(armnn::Optional<std::string&> value)
{
}
void PassStringRefWithDefault(armnn::Optional<std::string&> value = armnn::EmptyOptional())
{
}
} // namespace <anonymous>
BOOST_AUTO_TEST_SUITE(OptionalTests)
BOOST_AUTO_TEST_CASE(SimpleStringTests)
{
armnn::Optional<std::string> optionalString;
BOOST_TEST(optionalString == false);
BOOST_TEST(optionalString.has_value() == false);
optionalString = std::string("Hello World");
BOOST_TEST(optionalString == true);
BOOST_TEST(optionalString.has_value() == true);
BOOST_TEST(optionalString.value() == "Hello World");
armnn::Optional<std::string> otherString;
otherString = optionalString;
BOOST_TEST(otherString == true);
BOOST_TEST(otherString.value() == "Hello World");
optionalString.reset();
BOOST_TEST(optionalString == false);
BOOST_TEST(optionalString.has_value() == false);
const std::string stringValue("Hello World");
armnn::Optional<std::string> optionalString2(stringValue);
BOOST_TEST(optionalString2 == true);
BOOST_TEST(optionalString2.has_value() == true);
BOOST_TEST(optionalString2.value() == "Hello World");
armnn::Optional<std::string> optionalString3(std::move(optionalString2));
BOOST_TEST(optionalString3 == true);
BOOST_TEST(optionalString3.has_value() == true);
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(SimpleIntTests)
{
const int intValue = 123;
armnn::Optional<int> optionalInt;
BOOST_TEST(optionalInt == false);
BOOST_TEST(optionalInt.has_value() == false);
optionalInt = intValue;
BOOST_TEST(optionalInt == true);
BOOST_TEST(optionalInt.has_value() == true);
BOOST_TEST(optionalInt.value() == intValue);
armnn::Optional<int> otherOptionalInt;
otherOptionalInt = optionalInt;
BOOST_TEST(otherOptionalInt == true);
BOOST_TEST(otherOptionalInt.value() == intValue);
}
BOOST_AUTO_TEST_SUITE_END()