diff options
| author | 2024-05-02 20:59:25 +0000 | |
|---|---|---|
| committer | 2024-05-02 20:59:25 +0000 | |
| commit | 1c61140e6cc7046292508fd992c730e48b98807d (patch) | |
| tree | 188ba0b12e7fc4f615e85f6034cb51c27ef5d31a /libs | |
| parent | 67241b3835e90f11fba9571a25b3fc3d98a0cdf7 (diff) | |
| parent | 2e85e1b37bb9bd6f432614873ed74c9a5d53d45f (diff) | |
Merge changes Ib1090e39,I98aefe7c into main
* changes:
ftl: non_null improvements
ftl: contains
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/ftl/algorithm_test.cpp | 11 | ||||
| -rw-r--r-- | libs/ftl/non_null_test.cpp | 86 |
2 files changed, 96 insertions, 1 deletions
diff --git a/libs/ftl/algorithm_test.cpp b/libs/ftl/algorithm_test.cpp index 487b1b8759..11569f22c7 100644 --- a/libs/ftl/algorithm_test.cpp +++ b/libs/ftl/algorithm_test.cpp @@ -24,6 +24,17 @@ namespace android::test { // Keep in sync with example usage in header file. +TEST(Algorithm, Contains) { + const ftl::StaticVector vector = {1, 2, 3}; + EXPECT_TRUE(ftl::contains(vector, 1)); + + EXPECT_FALSE(ftl::contains(vector, 0)); + EXPECT_TRUE(ftl::contains(vector, 2)); + EXPECT_TRUE(ftl::contains(vector, 3)); + EXPECT_FALSE(ftl::contains(vector, 4)); +} + +// Keep in sync with example usage in header file. TEST(Algorithm, FindIf) { using namespace std::string_view_literals; diff --git a/libs/ftl/non_null_test.cpp b/libs/ftl/non_null_test.cpp index bd0462b3b6..367b398915 100644 --- a/libs/ftl/non_null_test.cpp +++ b/libs/ftl/non_null_test.cpp @@ -14,12 +14,17 @@ * limitations under the License. */ +#include <ftl/algorithm.h> #include <ftl/non_null.h> #include <gtest/gtest.h> #include <memory> +#include <set> #include <string> #include <string_view> +#include <type_traits> +#include <unordered_set> +#include <vector> namespace android::test { namespace { @@ -47,7 +52,7 @@ Pair dupe_if(ftl::NonNull<std::unique_ptr<int>> non_null_ptr, bool condition) { // Keep in sync with example usage in header file. TEST(NonNull, Example) { const auto string_ptr = ftl::as_non_null(std::make_shared<std::string>("android")); - std::size_t size; + std::size_t size{}; get_length(string_ptr, ftl::as_non_null(&size)); EXPECT_EQ(size, 7u); @@ -71,5 +76,84 @@ constexpr StringViewPtr longest(StringViewPtr ptr1, StringViewPtr ptr2) { static_assert(longest(kApplePtr, kOrangePtr) == kOrangePtr); +static_assert(static_cast<bool>(kApplePtr)); + +static_assert(std::is_same_v<decltype(ftl::as_non_null(std::declval<const int* const>())), + ftl::NonNull<const int*>>); + } // namespace + +TEST(NonNull, SwapRawPtr) { + int i1 = 123; + int i2 = 456; + auto ptr1 = ftl::as_non_null(&i1); + auto ptr2 = ftl::as_non_null(&i2); + + std::swap(ptr1, ptr2); + + EXPECT_EQ(*ptr1, 456); + EXPECT_EQ(*ptr2, 123); +} + +TEST(NonNull, SwapSmartPtr) { + auto ptr1 = ftl::as_non_null(std::make_shared<int>(123)); + auto ptr2 = ftl::as_non_null(std::make_shared<int>(456)); + + std::swap(ptr1, ptr2); + + EXPECT_EQ(*ptr1, 456); + EXPECT_EQ(*ptr2, 123); +} + +TEST(NonNull, VectorOfRawPtr) { + int i = 1; + std::vector<ftl::NonNull<int*>> vpi; + vpi.push_back(ftl::as_non_null(&i)); + EXPECT_FALSE(ftl::contains(vpi, nullptr)); + EXPECT_TRUE(ftl::contains(vpi, &i)); + EXPECT_TRUE(ftl::contains(vpi, vpi.front())); +} + +TEST(NonNull, VectorOfSmartPtr) { + std::vector<ftl::NonNull<std::shared_ptr<int>>> vpi; + vpi.push_back(ftl::as_non_null(std::make_shared<int>(2))); + EXPECT_FALSE(ftl::contains(vpi, nullptr)); + EXPECT_TRUE(ftl::contains(vpi, vpi.front().get())); + EXPECT_TRUE(ftl::contains(vpi, vpi.front())); +} + +TEST(NonNull, SetOfRawPtr) { + int i = 1; + std::set<ftl::NonNull<int*>> spi; + spi.insert(ftl::as_non_null(&i)); + EXPECT_FALSE(ftl::contains(spi, nullptr)); + EXPECT_TRUE(ftl::contains(spi, &i)); + EXPECT_TRUE(ftl::contains(spi, *spi.begin())); +} + +TEST(NonNull, SetOfSmartPtr) { + std::set<ftl::NonNull<std::shared_ptr<int>>> spi; + spi.insert(ftl::as_non_null(std::make_shared<int>(2))); + EXPECT_FALSE(ftl::contains(spi, nullptr)); + EXPECT_TRUE(ftl::contains(spi, spi.begin()->get())); + EXPECT_TRUE(ftl::contains(spi, *spi.begin())); +} + +TEST(NonNull, UnorderedSetOfRawPtr) { + int i = 1; + std::unordered_set<ftl::NonNull<int*>> spi; + spi.insert(ftl::as_non_null(&i)); + EXPECT_FALSE(ftl::contains(spi, nullptr)); + EXPECT_TRUE(ftl::contains(spi, &i)); + EXPECT_TRUE(ftl::contains(spi, *spi.begin())); +} + +TEST(NonNull, UnorderedSetOfSmartPtr) { + std::unordered_set<ftl::NonNull<std::shared_ptr<int>>> spi; + spi.insert(ftl::as_non_null(std::make_shared<int>(2))); + EXPECT_FALSE(ftl::contains(spi, nullptr)); + EXPECT_TRUE(ftl::contains(spi, spi.begin()->get())); + EXPECT_TRUE(ftl::contains(spi, *spi.begin())); +} + } // namespace android::test |