Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Utilities/cmcppdap/src/optional_test.cpp
3153 views
1
// Copyright 2019 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// https://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include "dap/optional.h"
16
17
#include "gmock/gmock.h"
18
#include "gtest/gtest.h"
19
20
#include <string>
21
22
TEST(Optional, EmptyConstruct) {
23
dap::optional<std::string> opt;
24
ASSERT_FALSE(opt);
25
ASSERT_FALSE(opt.has_value());
26
}
27
28
TEST(Optional, ValueConstruct) {
29
dap::optional<int> opt(10);
30
ASSERT_TRUE(opt);
31
ASSERT_TRUE(opt.has_value());
32
ASSERT_EQ(opt.value(), 10);
33
}
34
35
TEST(Optional, CopyConstruct) {
36
dap::optional<std::string> a("meow");
37
dap::optional<std::string> b(a);
38
ASSERT_EQ(a, b);
39
ASSERT_EQ(a.value(), "meow");
40
ASSERT_EQ(b.value(), "meow");
41
}
42
43
TEST(Optional, CopyCastConstruct) {
44
dap::optional<int> a(10);
45
dap::optional<uint16_t> b(a);
46
ASSERT_EQ(a, b);
47
ASSERT_EQ(b.value(), (uint16_t)10);
48
}
49
50
TEST(Optional, MoveConstruct) {
51
dap::optional<std::string> a("meow");
52
dap::optional<std::string> b(std::move(a));
53
ASSERT_EQ(b.value(), "meow");
54
}
55
56
TEST(Optional, MoveCastConstruct) {
57
dap::optional<int> a(10);
58
dap::optional<uint16_t> b(std::move(a));
59
ASSERT_EQ(b.value(), (uint16_t)10);
60
}
61
62
TEST(Optional, AssignValue) {
63
dap::optional<std::string> a;
64
std::string b = "meow";
65
a = b;
66
ASSERT_EQ(a.value(), "meow");
67
ASSERT_EQ(b, "meow");
68
}
69
70
TEST(Optional, AssignOptional) {
71
dap::optional<std::string> a;
72
dap::optional<std::string> b("meow");
73
a = b;
74
ASSERT_EQ(a.value(), "meow");
75
ASSERT_EQ(b.value(), "meow");
76
}
77
78
TEST(Optional, MoveAssignOptional) {
79
dap::optional<std::string> a;
80
dap::optional<std::string> b("meow");
81
a = std::move(b);
82
ASSERT_EQ(a.value(), "meow");
83
}
84
85
TEST(Optional, StarDeref) {
86
dap::optional<std::string> a("meow");
87
ASSERT_EQ(*a, "meow");
88
}
89
90
TEST(Optional, StarDerefConst) {
91
const dap::optional<std::string> a("meow");
92
ASSERT_EQ(*a, "meow");
93
}
94
95
TEST(Optional, ArrowDeref) {
96
struct S {
97
int i;
98
};
99
dap::optional<S> a(S{10});
100
ASSERT_EQ(a->i, 10);
101
}
102
103
TEST(Optional, ArrowDerefConst) {
104
struct S {
105
int i;
106
};
107
const dap::optional<S> a(S{10});
108
ASSERT_EQ(a->i, 10);
109
}
110
111
TEST(Optional, Value) {
112
const dap::optional<std::string> a("meow");
113
ASSERT_EQ(a.value(), "meow");
114
}
115
116
TEST(Optional, ValueDefault) {
117
const dap::optional<std::string> a;
118
const dap::optional<std::string> b("woof");
119
ASSERT_EQ(a.value("meow"), "meow");
120
ASSERT_EQ(b.value("meow"), "woof");
121
}
122
123
TEST(Optional, CompareLT) {
124
ASSERT_FALSE(dap::optional<int>(5) < dap::optional<int>(3));
125
ASSERT_FALSE(dap::optional<int>(5) < dap::optional<int>(5));
126
ASSERT_TRUE(dap::optional<int>(5) < dap::optional<int>(10));
127
ASSERT_TRUE(dap::optional<int>() < dap::optional<int>(10));
128
ASSERT_FALSE(dap::optional<int>() < dap::optional<int>());
129
}
130
131
TEST(Optional, CompareLE) {
132
ASSERT_FALSE(dap::optional<int>(5) <= dap::optional<int>(3));
133
ASSERT_TRUE(dap::optional<int>(5) <= dap::optional<int>(5));
134
ASSERT_TRUE(dap::optional<int>(5) <= dap::optional<int>(10));
135
ASSERT_TRUE(dap::optional<int>() <= dap::optional<int>(10));
136
ASSERT_TRUE(dap::optional<int>() <= dap::optional<int>());
137
}
138
139
TEST(Optional, CompareGT) {
140
ASSERT_TRUE(dap::optional<int>(5) > dap::optional<int>(3));
141
ASSERT_FALSE(dap::optional<int>(5) > dap::optional<int>(5));
142
ASSERT_FALSE(dap::optional<int>(5) > dap::optional<int>(10));
143
ASSERT_FALSE(dap::optional<int>() > dap::optional<int>(10));
144
ASSERT_FALSE(dap::optional<int>() > dap::optional<int>());
145
}
146
147
TEST(Optional, CompareGE) {
148
ASSERT_TRUE(dap::optional<int>(5) >= dap::optional<int>(3));
149
ASSERT_TRUE(dap::optional<int>(5) >= dap::optional<int>(5));
150
ASSERT_FALSE(dap::optional<int>(5) >= dap::optional<int>(10));
151
ASSERT_FALSE(dap::optional<int>() >= dap::optional<int>(10));
152
ASSERT_TRUE(dap::optional<int>() >= dap::optional<int>());
153
}
154
155
TEST(Optional, CompareEQ) {
156
ASSERT_FALSE(dap::optional<int>(5) == dap::optional<int>(3));
157
ASSERT_TRUE(dap::optional<int>(5) == dap::optional<int>(5));
158
ASSERT_FALSE(dap::optional<int>(5) == dap::optional<int>(10));
159
ASSERT_FALSE(dap::optional<int>() == dap::optional<int>(10));
160
ASSERT_TRUE(dap::optional<int>() == dap::optional<int>());
161
}
162
163
TEST(Optional, CompareNEQ) {
164
ASSERT_TRUE(dap::optional<int>(5) != dap::optional<int>(3));
165
ASSERT_FALSE(dap::optional<int>(5) != dap::optional<int>(5));
166
ASSERT_TRUE(dap::optional<int>(5) != dap::optional<int>(10));
167
ASSERT_TRUE(dap::optional<int>() != dap::optional<int>(10));
168
ASSERT_FALSE(dap::optional<int>() != dap::optional<int>());
169
}
170
171