aboutsummaryrefslogtreecommitdiff
path: root/libcxx/test/std/algorithms
diff options
context:
space:
mode:
authorStephan T. Lavavej <stl@nuwen.net>2024-01-29 02:55:35 -0800
committerGitHub <noreply@github.com>2024-01-29 11:55:35 +0100
commitef83894810db8ec72489f1b45bf943938f6b0af4 (patch)
tree37de9a0bdd60365494d3f268556e5bb781025aca /libcxx/test/std/algorithms
parentc9535d7b61a37d6fa58e51222a9ccecc54431193 (diff)
downloadllvm-ef83894810db8ec72489f1b45bf943938f6b0af4.zip
llvm-ef83894810db8ec72489f1b45bf943938f6b0af4.tar.gz
llvm-ef83894810db8ec72489f1b45bf943938f6b0af4.tar.bz2
[libc++][test] Fix zero-length arrays and copy-pasted lambdas in `ranges.contains.pass.cpp` (#79792)
* Fix MSVC error C2466: cannot allocate an array of constant size 0 + MSVC rejects this non-Standard extension. Previous fixes: #74183 * Fix MSVC warning C4805: `'=='`: unsafe mix of type `'int'` and type `'const bool'` in operation + AFAICT, these lambdas were copy-pasted, and didn't intend to take and return `int` here. This part of the test is using `vector<bool>` for random-access but non-contiguous iterators, and it's checking how many times the projection is invoked, but the projection doesn't need to do anything squirrely, it should otherwise be an identity. * Fix typos: "continuous" => "contiguous".
Diffstat (limited to 'libcxx/test/std/algorithms')
-rw-r--r--libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp b/libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp
index c928698..f710ca2 100644
--- a/libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp
+++ b/libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp
@@ -19,6 +19,7 @@
// constexpr bool ranges::contains(R&& r, const T& value, Proj proj = {}); // since C++23
#include <algorithm>
+#include <array>
#include <cassert>
#include <list>
#include <ranges>
@@ -89,8 +90,8 @@ constexpr void test_iterators() {
}
{ // check that an empty range works
- ValueT a[] = {};
- auto whole = std::ranges::subrange(Iter(a), Sent(Iter(a)));
+ std::array<ValueT, 0> a = {};
+ auto whole = std::ranges::subrange(Iter(a.data()), Sent(Iter(a.data())));
{
bool ret = std::ranges::contains(whole.begin(), whole.end(), 1);
assert(!ret);
@@ -164,7 +165,7 @@ constexpr bool test() {
});
});
- { // count invocations of the projection for continuous iterators
+ { // count invocations of the projection for contiguous iterators
int a[] = {1, 9, 0, 13, 25};
int projection_count = 0;
{
@@ -215,22 +216,22 @@ constexpr bool test() {
}
}
- { // check invocations of the projection for non-continuous iterators
+ { // check invocations of the projection for non-contiguous iterators
std::vector<bool> whole{false, false, true, false};
int projection_count = 0;
{
- bool ret = std::ranges::contains(whole.begin(), whole.end(), true, [&](int i) {
+ bool ret = std::ranges::contains(whole.begin(), whole.end(), true, [&](bool b) {
++projection_count;
- return i;
+ return b;
});
assert(ret);
assert(projection_count == 3);
projection_count = 0;
}
{
- bool ret = std::ranges::contains(whole, true, [&](int i) {
+ bool ret = std::ranges::contains(whole, true, [&](bool b) {
++projection_count;
- return i;
+ return b;
});
assert(ret);
assert(projection_count == 3);