Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1290)

Side by Side Diff: base/optional_unittest.cc

Issue 1245163002: Base: add Optional<T>. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nullable -> Optional Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« base/optional.h ('K') | « base/optional.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/optional.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace base {
10
11 namespace {
12
13 class DummyObject {
14 public:
15 DummyObject() : foo_(0), bar_(0.0) { }
16 DummyObject(int foo, double bar) : foo_(foo), bar_(bar) { }
17
18 bool operator==(const DummyObject& other) const {
19 return foo_ == other.foo_ && bar_ == other.bar_;
20 }
21
22 int foo() const { return foo_; }
23
24 private:
25 int foo_;
26 double bar_;
27 };
28
29 } // anonymous namespace
30
31 TEST(OptionalTest, DefaultConstructor) {
32 {
33 Optional<float> o;
34 EXPECT_FALSE(o);
35 }
36
37 {
38 Optional<std::string> o;
39 EXPECT_FALSE(o);
40 }
41
42 {
43 Optional<DummyObject> o;
44 EXPECT_FALSE(o);
45 }
46 }
47
48
49 TEST(OptionalTest, ValueConstructor) {
50 {
51 Optional<float> o(0.1f);
52 EXPECT_TRUE(o);
53 EXPECT_EQ(o.value(), 0.1f);
54 }
55
56 {
57 Optional<std::string> o("foo");
58 EXPECT_TRUE(o);
59 EXPECT_EQ(o.value(), "foo");
60 }
61
62 {
63 Optional<DummyObject> o(DummyObject(3, 0.1));
64 EXPECT_TRUE(o);
65 EXPECT_EQ(o.value(), DummyObject(3, 0.1));
66 }
67 }
68
69 TEST(OptionalTest, CopyConstructor) {
70 {
71 Optional<float> first(0.1f);
72 Optional<float> other(first);
73
74 EXPECT_TRUE(other);
75 EXPECT_EQ(other.value(), 0.1f);
76 EXPECT_EQ(first, other);
77 }
78
79 {
80 Optional<std::string> first("foo");
81 Optional<std::string> other(first);
82
83 EXPECT_TRUE(other);
84 EXPECT_EQ(other.value(), "foo");
85 EXPECT_EQ(first, other);
86 }
87
88 {
89 Optional<DummyObject> first(DummyObject(3, 0.1));
90 Optional<DummyObject> other(first);
91
92 EXPECT_TRUE(other);
93 EXPECT_EQ(other.value(), DummyObject(3, 0.1));
94 EXPECT_EQ(first, other);
95 }
96 }
97
98 TEST(OptionalTest, Equals) {
99 {
100 Optional<float> a(0.1f);
101 Optional<float> b(0.1f);
102 EXPECT_EQ(a, b);
103 }
104
105 {
106 Optional<std::string> a("foo");
107 Optional<std::string> b("foo");
108 EXPECT_EQ(a, b);
109 }
110
111 {
112 Optional<DummyObject> a(DummyObject(3, 0.1));
113 Optional<DummyObject> b(DummyObject(3, 0.1));
114 EXPECT_EQ(a, b);
115 }
116 }
117
118 TEST(OptionalTest, EqualsNull) {
119 {
120 Optional<float> a(0.1f);
121 Optional<float> b(0.2f);
122 a = nullptr;
123 b = nullptr;
124 EXPECT_EQ(a, b);
125 }
126
127 {
128 Optional<std::string> a("foo");
129 Optional<std::string> b("bar");
130 a = nullptr;
131 b = nullptr;
132 EXPECT_EQ(a, b);
133 }
134
135 {
136 Optional<DummyObject> a(DummyObject(3, 0.1));
137 Optional<DummyObject> b(DummyObject(4, 1.0));
138 a = nullptr;
139 b = nullptr;
140 EXPECT_EQ(a, b);
141 }
142 }
143
144 TEST(OptionalTest, NotEquals) {
145 {
146 Optional<float> a(0.1f);
147 Optional<float> b(0.2f);
148 EXPECT_NE(a, b);
149 }
150
151 {
152 Optional<std::string> a("foo");
153 Optional<std::string> b("bar");
154 EXPECT_NE(a, b);
155 }
156
157 {
158 Optional<DummyObject> a(DummyObject(3, 0.1));
159 Optional<DummyObject> b(DummyObject(4, 1.0));
160 EXPECT_NE(a, b);
161 }
162 }
163
164 TEST(OptionalTest, NotEqualsNull) {
165 {
166 Optional<float> a(0.1f);
167 Optional<float> b(0.1f);
168 b = nullptr;
169 EXPECT_NE(a, b);
170 }
171
172 {
173 Optional<std::string> a("foo");
174 Optional<std::string> b("foo");
175 b = nullptr;
176 EXPECT_NE(a, b);
177 }
178
179 {
180 Optional<DummyObject> a(DummyObject(3, 0.1));
181 Optional<DummyObject> b(DummyObject(3, 0.1));
182 b = nullptr;
183 EXPECT_NE(a, b);
184 }
185 }
186
187 TEST(OptionalTest, AssignValue) {
188 {
189 Optional<float> a;
190 EXPECT_FALSE(a);
191 a = 0.1f;
192 EXPECT_TRUE(a);
193
194 Optional<float> b(0.1f);
195 EXPECT_EQ(a, b);
196 }
197
198 {
199 Optional<std::string> a;
200 EXPECT_FALSE(a);
201 a = "foo";
202 EXPECT_TRUE(a);
203
204 Optional<std::string> b("foo");
205 EXPECT_EQ(a, b);
206 }
207
208 {
209 Optional<DummyObject> a;
210 EXPECT_FALSE(a);
211 a = DummyObject(3, 0.1);
212 EXPECT_TRUE(a);
213
214 Optional<DummyObject> b(DummyObject(3, 0.1));
215 EXPECT_EQ(a, b);
216 }
217 }
218
219 TEST(OptionalTest, AssignObject) {
220 {
221 Optional<float> a;
222 Optional<float> b(0.1f);
223 a = b;
224
225 EXPECT_TRUE(a);
226 EXPECT_EQ(a.value(), 0.1f);
227 EXPECT_EQ(a, b);
228 }
229
230 {
231 Optional<std::string> a;
232 Optional<std::string> b("foo");
233 a = b;
234
235 EXPECT_TRUE(a);
236 EXPECT_EQ(a.value(), "foo");
237 EXPECT_EQ(a, b);
238 }
239
240 {
241 Optional<DummyObject> a;
242 Optional<DummyObject> b(DummyObject(3, 0.1));
243 a = b;
244
245 EXPECT_TRUE(a);
246 EXPECT_EQ(a.value(), DummyObject(3, 0.1));
247 EXPECT_EQ(a, b);
248 }
249 }
250
251 TEST(OptionalTest, OperatorArrow) {
252 {
253 Optional<float> a(0.1f);
254 EXPECT_EQ(a.value(), *a);
255 }
256
257 {
258 Optional<std::string> a("foo");
259 EXPECT_EQ(a.value(), *a);
260 }
261
262 {
263 Optional<DummyObject> a(DummyObject(3, 0.1));
264 EXPECT_EQ(a.value(), *a);
265 }
266 }
267
268 TEST(OptionalTest, OperatorReference) {
269 Optional<DummyObject> a(DummyObject(3, 0.1));
270 EXPECT_EQ(a->foo(), 3);
271 }
272
273 TEST(OptionalTest, ValueOr) {
274 {
275 Optional<float> a;
276 EXPECT_EQ(a.value_or(0.0f), 0.0f);
277
278 a = 0.1f;
279 EXPECT_EQ(a.value_or(0.0f), 0.1f);
280
281 a = nullptr;
282 EXPECT_EQ(a.value_or(0.0f), 0.0f);
283 }
284
285 {
286 Optional<std::string> a;
287 EXPECT_EQ(a.value_or("bar"), "bar");
288
289 a = "foo";
290 EXPECT_EQ(a.value_or("bar"), "foo");
291
292 a = nullptr;
293 EXPECT_EQ(a.value_or("bar"), "bar");
294 }
295
296 {
297 Optional<DummyObject> a;
298 EXPECT_EQ(a.value_or(DummyObject(1, 0.3)), DummyObject(1, 0.3));
299
300 a = DummyObject(3, 0.1);
301 EXPECT_EQ(a.value_or(DummyObject(1, 0.3)), DummyObject(3, 0.1));
302
303 a = nullptr;
304 EXPECT_EQ(a.value_or(DummyObject(1, 0.3)), DummyObject(1, 0.3));
305 }
306 }
307
308 } // namespace base
OLDNEW
« base/optional.h ('K') | « base/optional.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698