[libcxx-commits] [libcxx] ef83894 - [libc++][test] Fix zero-length arrays and copy-pasted lambdas in `ranges.contains.pass.cpp` (#79792)
via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Jan 29 02:55:39 PST 2024
Author: Stephan T. Lavavej
Date: 2024-01-29T11:55:35+01:00
New Revision: ef83894810db8ec72489f1b45bf943938f6b0af4
URL: https://github.com/llvm/llvm-project/commit/ef83894810db8ec72489f1b45bf943938f6b0af4
DIFF: https://github.com/llvm/llvm-project/commit/ef83894810db8ec72489f1b45bf943938f6b0af4.diff
LOG: [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".
Added:
Modified:
libcxx/test/std/algorithms/alg.nonmodifying/alg.contains/ranges.contains.pass.cpp
Removed:
################################################################################
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 c928698e453013f..f710ca2c319dd6a 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);
More information about the libcxx-commits
mailing list