diff options
Diffstat (limited to 'pw_containers/filtered_view_test.cc')
-rw-r--r-- | pw_containers/filtered_view_test.cc | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/pw_containers/filtered_view_test.cc b/pw_containers/filtered_view_test.cc index 4d32a58ce..331558d37 100644 --- a/pw_containers/filtered_view_test.cc +++ b/pw_containers/filtered_view_test.cc @@ -17,6 +17,8 @@ #include <array> #include "gtest/gtest.h" +#include "pw_containers/algorithm.h" +#include "pw_containers/flat_map.h" #include "pw_containers/intrusive_list.h" #include "pw_span/span.h" @@ -47,7 +49,7 @@ TEST(FilteredView, Array_MatchAll) { std::array<bool, 6> found = {}; for (int value : view) { - found[value] = true; + found[static_cast<size_t>(value)] = true; } EXPECT_TRUE( std::all_of(found.begin(), found.end(), [](bool b) { return b; })); @@ -102,12 +104,29 @@ TEST(FilteredView, IntrusiveList_MatchAll) { for (const Item& item : FilteredView(intrusive_list, [](const Item&) { return true; })) { - found[item.value] = true; + found[static_cast<size_t>(item.value)] = true; } EXPECT_TRUE( std::all_of(found.begin(), found.end(), [](bool b) { return b; })); } +TEST(FilteredView, IntrusiveList_CopyPredicate) { + Item item_1{1}; + Item item_2{2}; + Item item_3{3}; + IntrusiveList<Item> intrusive_list({&item_1, &item_2, &item_3}); + + auto filter_to_copy = [](const Item& i) { return i.value % 2 != 0; }; + FilteredView view(intrusive_list, filter_to_copy); + + auto it = view.begin(); + ASSERT_EQ(it->value, 1); + ++it; + ASSERT_EQ((*it).value, 3); + ++it; + EXPECT_EQ(it, view.end()); +} + TEST(FilteredView, IntrusiveList_MatchNone) { Item item_1{0}; Item item_2{1}; @@ -172,5 +191,19 @@ TEST(FilteredView, Size_AllElements) { EXPECT_FALSE(FilteredView(kArray, [](int x) { return x < 5; }).empty()); } +TEST(FilteredView, FlatMap) { + pw::containers::FlatMap<char, int, 3> map({{{'A', 1}, {'B', 2}, {'C', 3}}}); + + auto odd_pred = [](pw::containers::Pair<char, int> p) { + return p.second % 2 != 0; + }; + + auto odd_map = pw::containers::FilteredView(map, std::move(odd_pred)); + + pw::containers::FlatMap<char, int, 2> odd_expect({{{'A', 1}, {'C', 3}}}); + + ASSERT_TRUE(pw::containers::Equal(odd_map, odd_expect)); +} + } // namespace } // namespace pw::containers |