diff options
author | Stephan T. Lavavej <stl@nuwen.net> | 2024-01-29 02:55:35 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-29 11:55:35 +0100 |
commit | ef83894810db8ec72489f1b45bf943938f6b0af4 (patch) | |
tree | 37de9a0bdd60365494d3f268556e5bb781025aca /libcxx/test/std/algorithms | |
parent | c9535d7b61a37d6fa58e51222a9ccecc54431193 (diff) | |
download | llvm-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.cpp | 17 |
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); |