diff options
author | 2022-11-22 10:13:38 -0800 | |
---|---|---|
committer | 2022-11-22 14:00:51 -0800 | |
commit | f28341eea6759d49ed6d9ba1d97ed1c6602fa0a4 (patch) | |
tree | 674ee5e13cedc6e356c6e400af693b27f4a61582 | |
parent | 686360612b52e825e516ccc706e9c7c43e316c65 (diff) |
ftl: add comparison operators to Optional
Add comparison operators and tests for Optional
Test: build
Bug: 185536303
Change-Id: Ic2002489f5fa04cbb8b4c7aba57c8213b9719944
-rw-r--r-- | include/ftl/optional.h | 10 | ||||
-rw-r--r-- | libs/ftl/optional_test.cpp | 31 |
2 files changed, 41 insertions, 0 deletions
diff --git a/include/ftl/optional.h b/include/ftl/optional.h index 626507fd8f..7b02bac340 100644 --- a/include/ftl/optional.h +++ b/include/ftl/optional.h @@ -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>; diff --git a/libs/ftl/optional_test.cpp b/libs/ftl/optional_test.cpp index f7410c2aa9..6b3b6c49e5 100644 --- a/libs/ftl/optional_test.cpp +++ b/libs/ftl/optional_test.cpp @@ -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 |