diff --git a/AK/Span.h b/AK/Span.h index b61bf079de6..de72faf0c9a 100644 --- a/AK/Span.h +++ b/AK/Span.h @@ -210,10 +210,11 @@ public: return size(); } - [[nodiscard]] constexpr bool contains_slow(T const& value) const + template + [[nodiscard]] constexpr bool contains_slow(V const& value) const { for (size_t i = 0; i < size(); ++i) { - if (at(i) == value) + if (Traits>::equals(at(i), value)) return true; } return false; diff --git a/Tests/AK/TestSpan.cpp b/Tests/AK/TestSpan.cpp index 098b34bd475..cfb14fb86aa 100644 --- a/Tests/AK/TestSpan.cpp +++ b/Tests/AK/TestSpan.cpp @@ -138,3 +138,24 @@ TEST_CASE(starts_with) ReadonlyBytes hey_bytes_u8 { hey_array, 3 }; EXPECT(bytes.starts_with(hey_bytes_u8)); } + +TEST_CASE(contains_slow) +{ + Vector list { "abc"_string, "def"_string, "ghi"_string }; + auto span = list.span(); + + EXPECT(span.contains_slow("abc"_string)); + EXPECT(span.contains_slow("abc"sv)); + + EXPECT(span.contains_slow("def"_string)); + EXPECT(span.contains_slow("def"sv)); + + EXPECT(span.contains_slow("ghi"_string)); + EXPECT(span.contains_slow("ghi"sv)); + + EXPECT(!span.contains_slow("whf"_string)); + EXPECT(!span.contains_slow("whf"sv)); + + EXPECT(!span.contains_slow(String {})); + EXPECT(!span.contains_slow(StringView {})); +}