Chromium Code Reviews| 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 |