10c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// Copyright 2016 The Chromium Authors. All rights reserved. 20c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// Use of this source code is governed by a BSD-style license that can be 30c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// found in the LICENSE file. 40c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 50c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez#include "base/optional.h" 60c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 70c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez#include <set> 80c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 90c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez#include "testing/gtest/include/gtest/gtest.h" 100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chaveznamespace base { 120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chaveznamespace { 140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// Object used to test complex object with Optional<T> in addition of the move 160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// semantics. 170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavezclass TestObject { 180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez public: 190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez enum class State { 200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez DEFAULT_CONSTRUCTED, 210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez VALUE_CONSTRUCTED, 220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez COPY_CONSTRUCTED, 230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez MOVE_CONSTRUCTED, 240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez MOVED_FROM, 250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez COPY_ASSIGNED, 260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez MOVE_ASSIGNED, 270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez SWAPPED, 280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez }; 290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject() : foo_(0), bar_(0.0), state_(State::DEFAULT_CONSTRUCTED) {} 310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject(int foo, double bar) 330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez : foo_(foo), bar_(bar), state_(State::VALUE_CONSTRUCTED) {} 340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject(const TestObject& other) 360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez : foo_(other.foo_), bar_(other.bar_), state_(State::COPY_CONSTRUCTED) {} 370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject(TestObject&& other) 390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez : foo_(std::move(other.foo_)), 400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez bar_(std::move(other.bar_)), 410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez state_(State::MOVE_CONSTRUCTED) { 420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez other.state_ = State::MOVED_FROM; 430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject& operator=(const TestObject& other) { 460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez foo_ = other.foo_; 470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez bar_ = other.bar_; 480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez state_ = State::COPY_ASSIGNED; 490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez return *this; 500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject& operator=(TestObject&& other) { 530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez foo_ = other.foo_; 540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez bar_ = other.bar_; 550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez state_ = State::MOVE_ASSIGNED; 560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez other.state_ = State::MOVED_FROM; 570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez return *this; 580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez void Swap(TestObject* other) { 610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez using std::swap; 620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez swap(foo_, other->foo_); 630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez swap(bar_, other->bar_); 640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez state_ = State::SWAPPED; 650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez other->state_ = State::SWAPPED; 660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez bool operator==(const TestObject& other) const { 690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez return foo_ == other.foo_ && bar_ == other.bar_; 700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez int foo() const { return foo_; } 730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez State state() const { return state_; } 740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez private: 760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez int foo_; 770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez double bar_; 780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez State state_; 790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez}; 800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez// Implementing Swappable concept. 820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavezvoid swap(TestObject& lhs, TestObject& rhs) { 830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez lhs.Swap(&rhs); 840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavezclass NonTriviallyDestructible { 870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez ~NonTriviallyDestructible() {} 880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez}; 890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} // anonymous namespace 910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavezstatic_assert(is_trivially_destructible<Optional<int>>::value, 930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez "OptionalIsTriviallyDestructible"); 940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavezstatic_assert( 960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez !is_trivially_destructible<Optional<NonTriviallyDestructible>>::value, 970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez "OptionalIsTriviallyDestructible"); 980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, DefaultConstructor) { 1000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> o; 1020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(o); 1030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> o; 1070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(o); 1080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> o; 1120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(o); 1130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 1150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, CopyConstructor) { 1170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> first(0.1f); 1190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> other(first); 1200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(other); 1220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(other.value(), 0.1f); 1230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(first, other); 1240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> first("foo"); 1280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> other(first); 1290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(other); 1310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(other.value(), "foo"); 1320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(first, other); 1330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> first(TestObject(3, 0.1)); 1370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> other(first); 1380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!other); 1400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(other.value() == TestObject(3, 0.1)); 1410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(first == other); 1420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 1440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueConstructor) { 1460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> o(0.1f); 1480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 1490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(o.value(), 0.1f); 1500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> o("foo"); 1540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 1550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(o.value(), "foo"); 1560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> o(TestObject(3, 0.1)); 1600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!o); 1610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o.value() == TestObject(3, 0.1)); 1620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 1640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, MoveConstructor) { 1660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> first(0.1f); 1680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> second(std::move(first)); 1690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(second); 1710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(second.value(), 0.1f); 1720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(first); 1740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> first("foo"); 1780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> second(std::move(first)); 1790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(second); 1810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("foo", second.value()); 1820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(first); 1840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 1870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> first(TestObject(3, 0.1)); 1880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> second(std::move(first)); 1890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!second); 1910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); 1920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == second.value()); 1930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!first); 1950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); 1960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 1970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 1980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 1990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, MoveValueConstructor) { 2000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> first(0.1f); 2020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> second(std::move(first.value())); 2030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(second); 2050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(second.value(), 0.1f); 2060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(first); 2080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> first("foo"); 2120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> second(std::move(first.value())); 2130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(second); 2150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("foo", second.value()); 2160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(first); 2180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> first(TestObject(3, 0.1)); 2220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> second(std::move(first.value())); 2230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!second); 2250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, second->state()); 2260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == second.value()); 2270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!first); 2290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVED_FROM, first->state()); 2300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 2320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ConstructorForwardArguments) { 2340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(base::in_place, 0.1f); 2360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 2370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.1f, a.value()); 2380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a(base::in_place, "foo"); 2420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 2430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("foo", a.value()); 2440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(base::in_place, 0, 0.1); 2480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 2490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(0, 0.1) == a.value()); 2500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 2520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NulloptConstructor) { 2540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a = base::nullopt; 2550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a); 2560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 2570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, AssignValue) { 2590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a; 2610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a); 2620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = 0.1f; 2630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 2640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.1f); 2660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 2670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a; 2710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a); 2720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::string("foo"); 2730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 2740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b(std::string("foo")); 2760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a, b); 2770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 2810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!a); 2820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = TestObject(3, 0.1); 2830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 2840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 2860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 2870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 2900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a = TestObject(4, 1.0); 2910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 2920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = TestObject(3, 0.1); 2930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 2940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 2950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 2960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 2970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 2980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 2990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, AssignObject) { 3010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a; 3030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.1f); 3040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = b; 3050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 3070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a.value(), 0.1f); 3080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a, b); 3090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a; 3130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b("foo"); 3140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = b; 3150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 3170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a.value(), "foo"); 3180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a, b); 3190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 3230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 3240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = b; 3250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 3270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a.value() == TestObject(3, 0.1)); 3280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 3290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(4, 1.0)); 3330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 3340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = b; 3350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 3370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a.value() == TestObject(3, 0.1)); 3380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 3390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 3410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, AssignObject_rvalue) { 3430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a; 3450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.1f); 3460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::move(b); 3470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 3490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(b); 3500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.1f, a.value()); 3510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a; 3550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b("foo"); 3560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::move(b); 3570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 3590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(b); 3600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("foo", a.value()); 3610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 3650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 3660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::move(b); 3670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 3690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 3700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == a.value()); 3710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, a->state()); 3730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVED_FROM, b->state()); 3740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(4, 1.0)); 3780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 3790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::move(b); 3800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 3820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 3830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == a.value()); 3840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_ASSIGNED, a->state()); 3860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVED_FROM, b->state()); 3870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 3890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, AssignNull) { 3910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 3920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(0.1f); 3930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.2f); 3940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 3950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 3960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a, b); 3970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 3980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 3990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a("foo"); 4010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b("bar"); 4020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 4030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 4040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a, b); 4050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(3, 0.1)); 4090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(4, 1.0)); 4100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 4110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 4120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 4130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OperatorStar) { 4170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(0.1f); 4190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a.value(), *a); 4200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a("foo"); 4240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a.value(), *a); 4250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(3, 0.1)); 4290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a.value(), *a); 4300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OperatorStar_rvalue) { 4340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.1f, *Optional<float>(0.1f)); 4350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(std::string("foo"), *Optional<std::string>("foo")); 4360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == *Optional<TestObject>(TestObject(3, 0.1))); 4370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OperatorArrow) { 4400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(3, 0.1)); 4410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(a->foo(), 3); 4420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Value_rvalue) { 4450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.1f, Optional<float>(0.1f).value()); 4460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(std::string("foo"), Optional<std::string>("foo").value()); 4470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == 4480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject>(TestObject(3, 0.1)).value()); 4490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueOr) { 4520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a; 4540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.0f, a.value_or(0.0f)); 4550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = 0.1f; 4570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.1f, a.value_or(0.0f)); 4580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 4600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.0f, a.value_or(0.0f)); 4610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a; 4650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("bar", a.value_or("bar")); 4660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = std::string("foo"); 4680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(std::string("foo"), a.value_or("bar")); 4690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 4710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(std::string("bar"), a.value_or("bar")); 4720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 4750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 4760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(1, 0.3)); 4770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = TestObject(3, 0.1); 4790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(3, 0.1)); 4800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a = base::nullopt; 4820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a.value_or(TestObject(1, 0.3)) == TestObject(1, 0.3)); 4830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 4840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Swap_bothNoValue) { 4870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a, b; 4880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.swap(b); 4890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a); 4910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(b); 4920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == a.value_or(TestObject(42, 0.42))); 4930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == b.value_or(TestObject(42, 0.42))); 4940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 4950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 4960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Swap_inHasValue) { 4970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(1, 0.3)); 4980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b; 4990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.swap(b); 5000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a); 5020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 5040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == a.value_or(TestObject(42, 0.42))); 5050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == b.value_or(TestObject(42, 0.42))); 5060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Swap_outHasValue) { 5090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 5100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(1, 0.3)); 5110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.swap(b); 5120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 5140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!b); 5150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == a.value_or(TestObject(42, 0.42))); 5160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == b.value_or(TestObject(42, 0.42))); 5170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Swap_bothValue) { 5200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(0, 0.1)); 5210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(1, 0.3)); 5220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.swap(b); 5230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 5250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 5260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == a.value_or(TestObject(42, 0.42))); 5270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(0, 0.1) == b.value_or(TestObject(42, 0.42))); 5280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::SWAPPED, a->state()); 5290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::SWAPPED, b->state()); 5300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Emplace) { 5330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 5340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(0.1f); 5350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.emplace(0.3f); 5360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 5380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(0.3f, a.value()); 5390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 5400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 5420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a("foo"); 5430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.emplace("bar"); 5440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a); 5460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("bar", a.value()); 5470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 5480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 5500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(0, 0.1)); 5510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez a.emplace(TestObject(1, 0.2)); 5520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 5540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.2) == a.value()); 5550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 5560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Equals_TwoEmpty) { 5590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a; 5600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b; 5610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 5630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Equals_TwoEquals) { 5660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a(1); 5670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 5680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a == b); 5700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Equals_OneEmpty) { 5730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a; 5740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 5750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a == b); 5770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Equals_TwoDifferent) { 5800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a(0); 5810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 5820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a == b); 5840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEquals_TwoEmpty) { 5870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a; 5880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b; 5890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a != b); 5910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEquals_TwoEquals) { 5940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a(1); 5950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 5960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 5970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(a != b); 5980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 5990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEquals_OneEmpty) { 6010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a; 6020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 6030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a != b); 6050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEquals_TwoDifferent) { 6080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> a(0); 6090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> b(1); 6100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a != b); 6120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Less_LeftEmpty) { 6150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 6160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l < r); 6190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Less_RightEmpty) { 6220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 6240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l < r); 6260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Less_BothEmpty) { 6290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 6300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 6310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l < r); 6330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Less_BothValues) { 6360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(2); 6390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l < r); 6410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(2); 6440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l < r); 6470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l < r); 6530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEq_LeftEmpty) { 6570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 6580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l <= r); 6610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEq_RightEmpty) { 6640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 6660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l <= r); 6680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEq_BothEmpty) { 6710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 6720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 6730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l <= r); 6750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEq_BothValues) { 6780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(2); 6810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l <= r); 6830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(2); 6860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l <= r); 6890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 6910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 6920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 6930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l <= r); 6950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 6960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 6970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 6980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Greater_BothEmpty) { 6990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 7000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 7010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l > r); 7030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Greater_LeftEmpty) { 7060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 7070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l > r); 7100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Greater_RightEmpty) { 7130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 7150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l > r); 7170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Greater_BothValue) { 7200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(2); 7230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l > r); 7250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(2); 7280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l > r); 7310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l > r); 7370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEq_BothEmpty) { 7410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 7420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 7430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l >= r); 7450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEq_LeftEmpty) { 7480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l; 7490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l >= r); 7520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEq_RightEmpty) { 7550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r; 7570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l >= r); 7590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEq_BothValue) { 7620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(2); 7650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(l >= r); 7670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(2); 7700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l >= r); 7730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> l(1); 7760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> r(1); 7770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(l >= r); 7790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullEq) { 7830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 7850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt == base::nullopt); 7860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 7890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt == base::nullopt); 7900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 7920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 7930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptEq) { 7940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 7960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt == opt); 7970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 7980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 7990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt == opt); 8010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullNotEq) { 8050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt != base::nullopt); 8080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt != base::nullopt); 8120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptNotEq) { 8160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt != opt); 8190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt != opt); 8230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullLower) { 8270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt < base::nullopt); 8300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt < base::nullopt); 8340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptLower) { 8380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt < opt); 8410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt < opt); 8450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullLowerEq) { 8490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt <= base::nullopt); 8520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt <= base::nullopt); 8560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptLowerEq) { 8600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt <= opt); 8630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt <= opt); 8670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullGreater) { 8710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt > base::nullopt); 8740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt > base::nullopt); 8780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptGreater) { 8820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt > opt); 8850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt > opt); 8890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 8910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 8920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, OptNullGreaterEq) { 8930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 8950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt >= base::nullopt); 8960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 8970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 8980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 8990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt >= base::nullopt); 9000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NullOptGreaterEq) { 9040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(base::nullopt >= opt); 9070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(base::nullopt >= opt); 9110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueEq_Empty) { 9150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt == 1); 9170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueEq_NotEmpty) { 9200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 9220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt == 1); 9230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt == 1); 9270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, EqValue_Empty) { 9310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 == opt); 9330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, EqValue_NotEmpty) { 9360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 9380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 == opt); 9390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 == opt); 9430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueNotEq_Empty) { 9470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt != 1); 9490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueNotEq_NotEmpty) { 9520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 9540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt != 1); 9550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt != 1); 9590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEqValue_Empty) { 9630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 != opt); 9650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEqValue_NotEmpty) { 9680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 9700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 != opt); 9710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 != opt); 9750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueLess_Empty) { 9790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 9800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt < 1); 9810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueLess_NotEmpty) { 9840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 9860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt < 1); 9870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 9900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt < 1); 9910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 9930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 9940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt < 1); 9950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 9960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 9970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 9980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessValue_Empty) { 9990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 10000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 < opt); 10010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessValue_NotEmpty) { 10040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 10060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 < opt); 10070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 10100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 < opt); 10110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 10140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 < opt); 10150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueLessEq_Empty) { 10190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 10200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt <= 1); 10210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueLessEq_NotEmpty) { 10240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 10260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt <= 1); 10270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 10300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt <= 1); 10310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 10340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt <= 1); 10350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEqValue_Empty) { 10390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 10400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 <= opt); 10410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, LessEqValue_NotEmpty) { 10440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 10460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 <= opt); 10470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 10500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 <= opt); 10510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 10540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 <= opt); 10550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueGreater_Empty) { 10590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 10600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt > 1); 10610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueGreater_NotEmpty) { 10640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 10660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt > 1); 10670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 10700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt > 1); 10710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 10740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt > 1); 10750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterValue_Empty) { 10790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 10800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 > opt); 10810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterValue_NotEmpty) { 10840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 10860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 > opt); 10870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 10900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 > opt); 10910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 10930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 10940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 > opt); 10950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 10960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 10970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 10980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueGreaterEq_Empty) { 10990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 11000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt >= 1); 11010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, ValueGreaterEq_NotEmpty) { 11040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 11060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(opt >= 1); 11070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 11100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt >= 1); 11110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 11140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(opt >= 1); 11150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEqValue_Empty) { 11190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt; 11200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 >= opt); 11210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, GreaterEqValue_NotEmpty) { 11240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(0); 11260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 >= opt); 11270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(1); 11300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(1 >= opt); 11310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<int> opt(2); 11340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(1 >= opt); 11350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEquals) { 11390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(0.1f); 11410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.2f); 11420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_NE(a, b); 11430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a("foo"); 11470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b("bar"); 11480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_NE(a, b); 11490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(3, 0.1)); 11530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(4, 1.0)); 11540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a != b); 11550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NotEqualsNull) { 11590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> a(0.1f); 11610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> b(0.1f); 11620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 11630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_NE(a, b); 11640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> a("foo"); 11680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> b("foo"); 11690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 11700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_NE(a, b); 11710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(3, 0.1)); 11750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(3, 0.1)); 11760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez b = base::nullopt; 11770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(a != b); 11780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 11800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, MakeOptional) { 11820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<float> o = base::make_optional(32.f); 11840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 11850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(32.f, *o); 11860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez float value = 3.f; 11880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez o = base::make_optional(std::move(value)); 11890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 11900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(3.f, *o); 11910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 11920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 11940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<std::string> o = base::make_optional(std::string("foo")); 11950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 11960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ("foo", *o); 11970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 11980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::string value = "bar"; 11990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez o = base::make_optional(std::move(value)); 12000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(o); 12010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(std::string("bar"), *o); 12020c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 12030c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12040c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 12050c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> o = base::make_optional(TestObject(3, 0.1)); 12060c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!o); 12070c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(3, 0.1) == *o); 12080c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12090c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez TestObject value = TestObject(0, 0.42); 12100c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez o = base::make_optional(std::move(value)); 12110c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!o); 12120c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(0, 0.42) == *o); 12130c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVED_FROM, value.state()); 12140c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_ASSIGNED, o->state()); 12150c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12160c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::MOVE_CONSTRUCTED, 12170c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez base::make_optional(std::move(value))->state()); 12180c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 12190c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12200c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12210c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NonMemberSwap_bothNoValue) { 12220c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a, b; 12230c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez base::swap(a, b); 12240c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12250c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!a); 12260c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!b); 12270c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == a.value_or(TestObject(42, 0.42))); 12280c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == b.value_or(TestObject(42, 0.42))); 12290c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12300c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12310c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NonMemberSwap_inHasValue) { 12320c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(1, 0.3)); 12330c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b; 12340c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez base::swap(a, b); 12350c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12360c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!a); 12370c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 12380c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == a.value_or(TestObject(42, 0.42))); 12390c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == b.value_or(TestObject(42, 0.42))); 12400c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12410c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12420c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NonMemberSwap_outHasValue) { 12430c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a; 12440c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(1, 0.3)); 12450c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez base::swap(a, b); 12460c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12470c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 12480c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_FALSE(!!b); 12490c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == a.value_or(TestObject(42, 0.42))); 12500c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(42, 0.42) == b.value_or(TestObject(42, 0.42))); 12510c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12520c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12530c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, NonMemberSwap_bothValue) { 12540c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> a(TestObject(0, 0.1)); 12550c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez Optional<TestObject> b(TestObject(1, 0.3)); 12560c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez base::swap(a, b); 12570c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12580c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!a); 12590c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(!!b); 12600c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(1, 0.3) == a.value_or(TestObject(42, 0.42))); 12610c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_TRUE(TestObject(0, 0.1) == b.value_or(TestObject(42, 0.42))); 12620c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::SWAPPED, a->state()); 12630c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(TestObject::State::SWAPPED, b->state()); 12640c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12650c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12660c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Hash_OptionalReflectsInternal) { 12670c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 12680c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<int> int_hash; 12690c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<Optional<int>> opt_int_hash; 12700c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12710c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(int_hash(1), opt_int_hash(Optional<int>(1))); 12720c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 12730c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12740c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez { 12750c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<std::string> str_hash; 12760c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<Optional<std::string>> opt_str_hash; 12770c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12780c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(str_hash(std::string("foobar")), 12790c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez opt_str_hash(Optional<std::string>(std::string("foobar")))); 12800c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez } 12810c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12820c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12830c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Hash_NullOptEqualsNullOpt) { 12840c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<Optional<int>> opt_int_hash; 12850c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::hash<Optional<std::string>> opt_str_hash; 12860c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12870c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(opt_str_hash(Optional<std::string>()), 12880c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez opt_int_hash(Optional<int>())); 12890c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 12900c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12910c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector ChavezTEST(OptionalTest, Hash_UseInSet) { 12920c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez std::set<Optional<int>> setOptInt; 12930c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12940c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(setOptInt.end(), setOptInt.find(42)); 12950c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 12960c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez setOptInt.insert(Optional<int>(3)); 12970c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_EQ(setOptInt.end(), setOptInt.find(42)); 12980c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez EXPECT_NE(setOptInt.end(), setOptInt.find(3)); 12990c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} 13000c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez 13010c4f26a46430b8c503c65f5cae1d2b6876d53e30Luis Hector Chavez} // namespace base 1302