diff options
author | Ali Mohammad Pur <ali.mpfard@gmail.com> | 2021-07-22 19:11:00 +0430 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-07-22 22:56:20 +0200 |
commit | d40d10aae72d1d6d04b818d2173e5c5f5a731384 (patch) | |
tree | 765ab8adb42259008759804e30af7c071869d55b /Tests/AK/TestAllOf.cpp | |
parent | f879e041339ee414ddb9514a0883baa66ce34f6d (diff) | |
download | serenity-d40d10aae72d1d6d04b818d2173e5c5f5a731384.zip |
AK: Implement {any,all}_of(IterableContainer&&, Predicate)
This is a generally nicer-to-use version of the existing {any,all}_of()
that doesn't require the user to explicitly provide two iterators.
As a bonus, it also allows arbitrary iterators (as opposed to the hard
requirement of providing SimpleIterators in the iterator version).
Diffstat (limited to 'Tests/AK/TestAllOf.cpp')
-rw-r--r-- | Tests/AK/TestAllOf.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Tests/AK/TestAllOf.cpp b/Tests/AK/TestAllOf.cpp index 48f5d0f7aa..f8b23f71ce 100644 --- a/Tests/AK/TestAllOf.cpp +++ b/Tests/AK/TestAllOf.cpp @@ -19,3 +19,41 @@ TEST_CASE(should_determine_if_predicate_applies_to_all_elements_in_container) EXPECT(all_of(a.begin(), a.end(), [](auto elem) { return elem == 0; })); EXPECT(!all_of(a.begin(), a.end(), [](auto elem) { return elem == 1; })); } + +TEST_CASE(container_form) +{ + constexpr Array a { 10, 20, 30 }; + static_assert(all_of(a, [](auto elem) { return elem > 0; })); + static_assert(!all_of(a, [](auto elem) { return elem > 10; })); + EXPECT(all_of(a, [](auto elem) { return elem > 0; })); + EXPECT(!all_of(a, [](auto elem) { return elem > 10; })); + + Vector b { 10, 20, 30 }; + EXPECT(all_of(b, [](auto elem) { return elem > 0; })); + EXPECT(!all_of(b, [](auto elem) { return elem > 10; })); + + struct ArbitraryIterable { + struct ArbitraryIterator { + ArbitraryIterator(int v) + : value(v) + { + } + + bool operator==(ArbitraryIterator const&) const = default; + int operator*() const { return value; } + ArbitraryIterator& operator++() + { + ++value; + return *this; + } + + int value; + }; + ArbitraryIterator begin() const { return 0; } + ArbitraryIterator end() const { return 20; } + }; + + ArbitraryIterable c; + EXPECT(all_of(c, [](auto elem) { return elem < 20; })); + EXPECT(!all_of(c, [](auto elem) { return elem > 10; })); +} |