OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/optional.h" | 5 #include "base/optional.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
91 | 91 |
92 static_assert(is_trivially_destructible<Optional<int>>::value, | 92 static_assert(is_trivially_destructible<Optional<int>>::value, |
93 "OptionalIsTriviallyDestructible"); | 93 "OptionalIsTriviallyDestructible"); |
94 | 94 |
95 static_assert( | 95 static_assert( |
96 !is_trivially_destructible<Optional<NonTriviallyDestructible>>::value, | 96 !is_trivially_destructible<Optional<NonTriviallyDestructible>>::value, |
97 "OptionalIsTriviallyDestructible"); | 97 "OptionalIsTriviallyDestructible"); |
98 | 98 |
99 TEST(OptionalTest, DefaultConstructor) { | 99 TEST(OptionalTest, DefaultConstructor) { |
100 { | 100 { |
101 Optional<float> o; | 101 constexpr Optional<float> o; |
102 EXPECT_FALSE(o); | 102 EXPECT_FALSE(o); |
103 } | 103 } |
104 | 104 |
105 { | 105 { |
106 Optional<std::string> o; | 106 Optional<std::string> o; |
107 EXPECT_FALSE(o); | 107 EXPECT_FALSE(o); |
108 } | 108 } |
109 | 109 |
110 { | 110 { |
111 Optional<TestObject> o; | 111 Optional<TestObject> o; |
(...skipping 25 matching lines...) Expand all Loading... | |
137 Optional<TestObject> other(first); | 137 Optional<TestObject> other(first); |
138 | 138 |
139 EXPECT_TRUE(!!other); | 139 EXPECT_TRUE(!!other); |
140 EXPECT_TRUE(other.value() == TestObject(3, 0.1)); | 140 EXPECT_TRUE(other.value() == TestObject(3, 0.1)); |
141 EXPECT_TRUE(first == other); | 141 EXPECT_TRUE(first == other); |
142 } | 142 } |
143 } | 143 } |
144 | 144 |
145 TEST(OptionalTest, ValueConstructor) { | 145 TEST(OptionalTest, ValueConstructor) { |
146 { | 146 { |
147 Optional<float> o(0.1f); | 147 constexpr Optional<float> o(0.1f); |
148 EXPECT_TRUE(o); | 148 EXPECT_TRUE(o); |
149 EXPECT_EQ(o.value(), 0.1f); | 149 EXPECT_EQ(o.value(), 0.1f); |
150 } | 150 } |
151 | 151 |
152 { | 152 { |
153 Optional<std::string> o("foo"); | 153 Optional<std::string> o("foo"); |
154 EXPECT_TRUE(o); | 154 EXPECT_TRUE(o); |
155 EXPECT_EQ(o.value(), "foo"); | 155 EXPECT_EQ(o.value(), "foo"); |
156 } | 156 } |
157 | 157 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
191 EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); | 191 EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); |
192 EXPECT_TRUE(TestObject(3, 0.1) == second.value()); | 192 EXPECT_TRUE(TestObject(3, 0.1) == second.value()); |
193 | 193 |
194 EXPECT_TRUE(!!first); | 194 EXPECT_TRUE(!!first); |
195 EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); | 195 EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); |
196 } | 196 } |
197 } | 197 } |
198 | 198 |
199 TEST(OptionalTest, MoveValueConstructor) { | 199 TEST(OptionalTest, MoveValueConstructor) { |
200 { | 200 { |
201 Optional<float> first(0.1f); | 201 constexpr float value = 0.1f; |
danakj
2016/10/21 23:12:08
Can you make all 3 cases in this test look alike?
alshabalin
2016/10/22 07:47:52
Done.
| |
202 Optional<float> second(std::move(first.value())); | 202 constexpr Optional<float> a(std::move(value)); |
203 | 203 |
204 EXPECT_TRUE(second); | 204 EXPECT_TRUE(a); |
205 EXPECT_EQ(second.value(), 0.1f); | 205 EXPECT_EQ(0.1f, a.value()); |
206 | |
207 EXPECT_TRUE(first); | |
208 } | 206 } |
209 | 207 |
210 { | 208 { |
211 Optional<std::string> first("foo"); | 209 Optional<std::string> first("foo"); |
212 Optional<std::string> second(std::move(first.value())); | 210 Optional<std::string> second(std::move(first.value())); |
213 | 211 |
214 EXPECT_TRUE(second); | 212 EXPECT_TRUE(second); |
215 EXPECT_EQ("foo", second.value()); | 213 EXPECT_EQ("foo", second.value()); |
216 | 214 |
217 EXPECT_TRUE(first); | 215 EXPECT_TRUE(first); |
218 } | 216 } |
219 | 217 |
220 { | 218 { |
221 Optional<TestObject> first(TestObject(3, 0.1)); | 219 Optional<TestObject> first(TestObject(3, 0.1)); |
222 Optional<TestObject> second(std::move(first.value())); | 220 Optional<TestObject> second(std::move(first.value())); |
223 | 221 |
224 EXPECT_TRUE(!!second); | 222 EXPECT_TRUE(!!second); |
225 EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); | 223 EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); |
226 EXPECT_TRUE(TestObject(3, 0.1) == second.value()); | 224 EXPECT_TRUE(TestObject(3, 0.1) == second.value()); |
227 | 225 |
228 EXPECT_TRUE(!!first); | 226 EXPECT_TRUE(!!first); |
229 EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); | 227 EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); |
230 } | 228 } |
231 } | 229 } |
232 | 230 |
233 TEST(OptionalTest, ConstructorForwardArguments) { | 231 TEST(OptionalTest, ConstructorForwardArguments) { |
234 { | 232 { |
235 Optional<float> a(base::in_place, 0.1f); | 233 constexpr Optional<float> a(base::in_place, 0.1f); |
236 EXPECT_TRUE(a); | 234 EXPECT_TRUE(a); |
237 EXPECT_EQ(0.1f, a.value()); | 235 EXPECT_EQ(0.1f, a.value()); |
238 } | 236 } |
239 | 237 |
240 { | 238 { |
241 Optional<std::string> a(base::in_place, "foo"); | 239 Optional<std::string> a(base::in_place, "foo"); |
242 EXPECT_TRUE(a); | 240 EXPECT_TRUE(a); |
243 EXPECT_EQ("foo", a.value()); | 241 EXPECT_EQ("foo", a.value()); |
244 } | 242 } |
245 | 243 |
246 { | 244 { |
247 Optional<TestObject> a(base::in_place, 0, 0.1); | 245 Optional<TestObject> a(base::in_place, 0, 0.1); |
248 EXPECT_TRUE(!!a); | 246 EXPECT_TRUE(!!a); |
249 EXPECT_TRUE(TestObject(0, 0.1) == a.value()); | 247 EXPECT_TRUE(TestObject(0, 0.1) == a.value()); |
250 } | 248 } |
251 } | 249 } |
252 | 250 |
253 TEST(OptionalTest, NulloptConstructor) { | 251 TEST(OptionalTest, NulloptConstructor) { |
254 Optional<int> a = base::nullopt; | 252 constexpr Optional<int> a(base::nullopt); |
255 EXPECT_FALSE(a); | 253 EXPECT_FALSE(a); |
256 } | 254 } |
257 | 255 |
258 TEST(OptionalTest, AssignValue) { | 256 TEST(OptionalTest, AssignValue) { |
259 { | 257 { |
260 Optional<float> a; | 258 Optional<float> a; |
261 EXPECT_FALSE(a); | 259 EXPECT_FALSE(a); |
262 a = 0.1f; | 260 a = 0.1f; |
263 EXPECT_TRUE(a); | 261 EXPECT_TRUE(a); |
264 | 262 |
(...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1337 | 1335 |
1338 TEST(OptionalTest, Reset_NoOp) { | 1336 TEST(OptionalTest, Reset_NoOp) { |
1339 Optional<int> a; | 1337 Optional<int> a; |
1340 EXPECT_FALSE(a.has_value()); | 1338 EXPECT_FALSE(a.has_value()); |
1341 | 1339 |
1342 a.reset(); | 1340 a.reset(); |
1343 EXPECT_FALSE(a.has_value()); | 1341 EXPECT_FALSE(a.has_value()); |
1344 } | 1342 } |
1345 | 1343 |
1346 } // namespace base | 1344 } // namespace base |
OLD | NEW |