Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f28341ee authored by Ady Abraham's avatar Ady Abraham
Browse files

ftl: add comparison operators to Optional

Add comparison operators and tests for Optional

Test: build
Bug: 185536303
Change-Id: Ic2002489f5fa04cbb8b4c7aba57c8213b9719944
parent 68636061
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -97,6 +97,16 @@ struct Optional final : std::optional<T> {
  }
};

template <typename T, typename U>
constexpr bool operator==(const Optional<T>& lhs, const Optional<U>& rhs) {
  return static_cast<std::optional<T>>(lhs) == static_cast<std::optional<U>>(rhs);
}

template <typename T, typename U>
constexpr bool operator!=(const Optional<T>& lhs, const Optional<U>& rhs) {
  return !(lhs == rhs);
}

// Deduction guides.
template <typename T>
Optional(T) -> Optional<T>;
+31 −0
Original line number Diff line number Diff line
@@ -164,4 +164,35 @@ TEST(Optional, AndThen) {
                     }));
}

// Comparison.
namespace {

constexpr Optional<int> kOptional1 = 1;
constexpr Optional<int> kAnotherOptional1 = 1;
constexpr Optional<int> kOptional2 = 2;
constexpr Optional<int> kOptionalEmpty, kAnotherOptionalEmpty;

constexpr std::optional<int> kStdOptional1 = 1;

static_assert(kOptional1 == kAnotherOptional1);

static_assert(kOptional1 != kOptional2);
static_assert(kOptional2 != kOptional1);

static_assert(kOptional1 != kOptionalEmpty);
static_assert(kOptionalEmpty != kOptional1);

static_assert(kOptionalEmpty == kAnotherOptionalEmpty);

static_assert(kOptional1 == kStdOptional1);
static_assert(kStdOptional1 == kOptional1);

static_assert(kOptional2 != kStdOptional1);
static_assert(kStdOptional1 != kOptional2);

static_assert(kOptional2 != kOptionalEmpty);
static_assert(kOptionalEmpty != kOptional2);

} // namespace

}  // namespace android::test