[libcxx-commits] [libcxx] [libcxx][NFC] Consolidate testing concept CanBePiped (PR #80154)
Will Hawkins via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jan 31 07:55:44 PST 2024
https://github.com/hawkinsw created https://github.com/llvm/llvm-project/pull/80154
Almost every test needed a CanBePiped concept and each implemented it separately, but identically. Consolidate all implementations into test_range.h.
>From 21d1694ff07145867804c00ac24fea2859cf8be3 Mon Sep 17 00:00:00 2001
From: Will Hawkins <hawkinsw at obs.cr>
Date: Wed, 31 Jan 2024 10:40:52 -0500
Subject: [PATCH] [libcxx][NFC] Consolidate testing concept CanBePiped
Almost every test needed a CanBePiped concept and each implemented it
separately, but identically. Consolidate all implementations into
test_range.h.
---
.../test/std/ranges/range.adaptors/range.all/all.pass.cpp | 8 ++------
.../ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp | 6 +-----
.../range.adaptors/range.common.view/adaptor.pass.cpp | 6 +-----
.../range.adaptors/range.drop.while/adaptor.pass.cpp | 8 ++------
.../std/ranges/range.adaptors/range.drop/adaptor.pass.cpp | 7 ++-----
.../ranges/range.adaptors/range.elements/adaptor.pass.cpp | 8 ++------
.../ranges/range.adaptors/range.filter/adaptor.pass.cpp | 6 +-----
.../std/ranges/range.adaptors/range.join/adaptor.pass.cpp | 5 -----
.../range.adaptors/range.lazy.split/adaptor.pass.cpp | 6 +-----
.../ranges/range.adaptors/range.reverse/adaptor.pass.cpp | 6 +-----
.../ranges/range.adaptors/range.split/adaptor.pass.cpp | 6 +-----
.../range.adaptors/range.take.while/adaptor.pass.cpp | 6 ------
.../std/ranges/range.adaptors/range.take/adaptor.pass.cpp | 7 ++-----
.../range.adaptors/range.transform/adaptor.pass.cpp | 5 -----
libcxx/test/support/test_range.h | 5 +++++
15 files changed, 21 insertions(+), 74 deletions(-)
diff --git a/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
index d90a25d93e345..d31373fcad78b 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
@@ -17,8 +17,9 @@
#include <type_traits>
#include <utility>
-#include "test_macros.h"
#include "test_iterators.h"
+#include "test_macros.h"
+#include "test_range.h"
int globalBuff[8];
@@ -82,11 +83,6 @@ struct RandomAccessRange {
template<>
inline constexpr bool std::ranges::enable_borrowed_range<RandomAccessRange> = true;
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
constexpr bool test() {
{
ASSERT_SAME_TYPE(decltype(std::views::all(View<true>())), View<true>);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp
index 423c481127e20..697085a1d5c55 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp
@@ -22,11 +22,7 @@
#include <utility>
#include "test_iterators.h"
-
-template <class View, class T>
-concept CanBePiped = requires(View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
+#include "test_range.h"
struct Pred {
constexpr bool operator()(int x, int y) const { return x != -y; }
diff --git a/libcxx/test/std/ranges/range.adaptors/range.common.view/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.common.view/adaptor.pass.cpp
index 143f7df1d3724..b0e72e9e79148 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.common.view/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.common.view/adaptor.pass.cpp
@@ -18,13 +18,9 @@
#include <utility>
#include "test_iterators.h"
+#include "test_range.h"
#include "types.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
constexpr bool test() {
int buf[] = {1, 2, 3};
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop.while/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop.while/adaptor.pass.cpp
index 409b400f7f87f..c41d4172f1990 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop.while/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop.while/adaptor.pass.cpp
@@ -16,6 +16,8 @@
#include <type_traits>
#include <utility>
+#include "test_range.h"
+
struct Pred {
constexpr bool operator()(int i) const { return i < 3; }
};
@@ -51,12 +53,6 @@ static_assert(std::is_invocable_v<decltype((std::views::drop_while)), int (&)[2]
static_assert(!std::is_invocable_v<decltype((std::views::drop_while)), Foo (&)[2], Pred>);
static_assert(std::is_invocable_v<decltype((std::views::drop_while)), MoveOnlyView, Pred>);
-template <class View, class T>
-concept CanBePiped =
- requires(View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
- };
-
static_assert(!CanBePiped<MoveOnlyView, decltype(std::views::drop_while)>);
static_assert(CanBePiped<MoveOnlyView, decltype(std::views::drop_while(Pred{}))>);
static_assert(!CanBePiped<int, decltype(std::views::drop_while(Pred{}))>);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.drop/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.drop/adaptor.pass.cpp
index 457b137c80457..d07fe9ac0ea72 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.drop/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.drop/adaptor.pass.cpp
@@ -18,12 +18,9 @@
#include <span>
#include <string_view>
#include <utility>
-#include "test_iterators.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
+#include "test_iterators.h"
+#include "test_range.h"
struct SizedView : std::ranges::view_base {
int* begin_ = nullptr;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.elements/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.elements/adaptor.pass.cpp
index d68d6e57e2ed5..35589c96e4b77 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.elements/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.elements/adaptor.pass.cpp
@@ -19,6 +19,8 @@
#include <type_traits>
#include <utility>
+#include "test_range.h"
+
template <class T>
struct View : std::ranges::view_base {
T* begin() const;
@@ -41,12 +43,6 @@ static_assert(!std::is_invocable_v<decltype((std::views::values)), View<int>>);
static_assert(std::is_invocable_v<decltype((std::views::values)), View<std::pair<int, int>>>);
static_assert(!std::is_invocable_v<decltype((std::views::values)), View<std::tuple<int>>>);
-template <class View, class T>
-concept CanBePiped =
- requires(View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
- };
-
static_assert(!CanBePiped<View<int>, decltype((std::views::elements<0>))>);
static_assert(CanBePiped<View<std::pair<int, int>>, decltype((std::views::elements<0>))>);
static_assert(CanBePiped<View<std::tuple<int>>, decltype((std::views::elements<0>))>);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.filter/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.filter/adaptor.pass.cpp
index 1adf1b4630b87..a44e96e1d4bde 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.filter/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.filter/adaptor.pass.cpp
@@ -19,11 +19,7 @@
#include <utility>
#include "test_iterators.h"
-
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
+#include "test_range.h"
struct NonCopyablePredicate {
NonCopyablePredicate(NonCopyablePredicate const&) = delete;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.join/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.join/adaptor.pass.cpp
index 9beb3d282a27c..54d95edf510f4 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.join/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.join/adaptor.pass.cpp
@@ -32,11 +32,6 @@ struct Foo {
constexpr Foo(int ii) : i(ii) {}
};
-template <class View, class T>
-concept CanBePiped = requires(View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
constexpr bool test() {
int buffer1[3] = {1, 2, 3};
int buffer2[2] = {4, 5};
diff --git a/libcxx/test/std/ranges/range.adaptors/range.lazy.split/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.lazy.split/adaptor.pass.cpp
index 6bfa0ab487ba1..7bb7e95b02dab 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.lazy.split/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.lazy.split/adaptor.pass.cpp
@@ -19,13 +19,9 @@
#include <utility>
#include "test_iterators.h"
+#include "test_range.h"
#include "types.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
struct SomeView : std::ranges::view_base {
const std::string_view* v_;
constexpr SomeView(const std::string_view& v) : v_(&v) {}
diff --git a/libcxx/test/std/ranges/range.adaptors/range.reverse/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.reverse/adaptor.pass.cpp
index 5e0a0a3ce3fbc..26c9ac08d338b 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.reverse/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.reverse/adaptor.pass.cpp
@@ -17,13 +17,9 @@
#include <iterator>
#include <utility>
+#include "test_range.h"
#include "types.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
constexpr bool test() {
int buf[] = {1, 2, 3};
diff --git a/libcxx/test/std/ranges/range.adaptors/range.split/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.split/adaptor.pass.cpp
index 85d13ac5c29df..34c0f15ce3463 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.split/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.split/adaptor.pass.cpp
@@ -19,11 +19,7 @@
#include <utility>
#include "test_iterators.h"
-
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
+#include "test_range.h"
struct SomeView : std::ranges::view_base {
const std::string_view* v_;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.take.while/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.take.while/adaptor.pass.cpp
index 8796f9df63cee..42814014ce884 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.take.while/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.take.while/adaptor.pass.cpp
@@ -42,12 +42,6 @@ static_assert(std::is_invocable_v<decltype((std::views::take_while)), int (&)[2]
static_assert(!std::is_invocable_v<decltype((std::views::take_while)), Foo (&)[2], Pred>);
static_assert(std::is_invocable_v<decltype((std::views::take_while)), MoveOnlyView, Pred>);
-template <class View, class T>
-concept CanBePiped =
- requires(View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
- };
-
static_assert(!CanBePiped<MoveOnlyView, decltype(std::views::take_while)>);
static_assert(CanBePiped<MoveOnlyView, decltype(std::views::take_while(Pred{}))>);
static_assert(!CanBePiped<int, decltype(std::views::take_while(Pred{}))>);
diff --git a/libcxx/test/std/ranges/range.adaptors/range.take/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.take/adaptor.pass.cpp
index bb5b5f5ff4909..b30c4fbe3fd96 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.take/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.take/adaptor.pass.cpp
@@ -17,12 +17,9 @@
#include <span>
#include <string_view>
#include <utility>
-#include "test_iterators.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
+#include "test_iterators.h"
+#include "test_range.h"
struct SizedView : std::ranges::view_base {
int* begin_ = nullptr;
diff --git a/libcxx/test/std/ranges/range.adaptors/range.transform/adaptor.pass.cpp b/libcxx/test/std/ranges/range.adaptors/range.transform/adaptor.pass.cpp
index 59dd85bf28bc3..91eedc5d36a96 100644
--- a/libcxx/test/std/ranges/range.adaptors/range.transform/adaptor.pass.cpp
+++ b/libcxx/test/std/ranges/range.adaptors/range.transform/adaptor.pass.cpp
@@ -20,11 +20,6 @@
#include "test_macros.h"
#include "types.h"
-template <class View, class T>
-concept CanBePiped = requires (View&& view, T&& t) {
- { std::forward<View>(view) | std::forward<T>(t) };
-};
-
struct NonCopyableFunction {
NonCopyableFunction(NonCopyableFunction const&) = delete;
template <class T>
diff --git a/libcxx/test/support/test_range.h b/libcxx/test/support/test_range.h
index 6061f710a2636..c5eeb25bb59eb 100644
--- a/libcxx/test/support/test_range.h
+++ b/libcxx/test/support/test_range.h
@@ -89,4 +89,9 @@ concept simple_view =
std::same_as<std::ranges::iterator_t<Range>, std::ranges::iterator_t<const Range>> &&
std::same_as<std::ranges::sentinel_t<Range>, std::ranges::sentinel_t<const Range>>;
+template <class View, class T>
+concept CanBePiped = requires(View&& view, T&& t) {
+ { std::forward<View>(view) | std::forward<T>(t) };
+};
+
#endif // LIBCXX_TEST_SUPPORT_TEST_RANGE_H
More information about the libcxx-commits
mailing list