aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/test/OptionalTest.cpp
blob: 3f4c02d56ffa518f331fc3965b20b4b97d595367 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//
// 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()