summaryrefslogtreecommitdiff
path: root/Tests/AK/TestAllOf.cpp
diff options
context:
space:
mode:
authorAli Mohammad Pur <ali.mpfard@gmail.com>2021-07-22 19:11:00 +0430
committerAndreas Kling <kling@serenityos.org>2021-07-22 22:56:20 +0200
commitd40d10aae72d1d6d04b818d2173e5c5f5a731384 (patch)
tree765ab8adb42259008759804e30af7c071869d55b /Tests/AK/TestAllOf.cpp
parentf879e041339ee414ddb9514a0883baa66ce34f6d (diff)
downloadserenity-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.cpp38
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; }));
+}