[libcxx-commits] [libcxx] ba2236d - [libcxx][NFC] Consolidate testing concept CanBePiped (#80154)
via libcxx-commits
libcxx-commits at lists.llvm.org
Fri Mar 8 06:25:55 PST 2024
Author: Will Hawkins
Date: 2024-03-08T09:25:51-05:00
New Revision: ba2236d3000645d3127f972aa7ac1844c47e299c
URL: https://github.com/llvm/llvm-project/commit/ba2236d3000645d3127f972aa7ac1844c47e299c
DIFF: https://github.com/llvm/llvm-project/commit/ba2236d3000645d3127f972aa7ac1844c47e299c.diff
LOG: [libcxx][NFC] Consolidate testing concept CanBePiped (#80154)
Almost every test needed a CanBePiped concept and each implemented it
separately, but identically. Consolidate all implementations into
test_range.h.
Added:
Modified:
libcxx/test/std/ranges/range.adaptors/range.all/all.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.chunk.by/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.common.view/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.drop.while/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.drop/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.elements/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.filter/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.lazy.split/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.reverse/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.split/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.take.while/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.take/adaptor.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.transform/adaptor.pass.cpp
libcxx/test/support/test_range.h
Removed:
################################################################################
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 d90a25d93e345d..d31373fcad78b6 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 423c481127e20e..697085a1d5c554 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 143f7df1d3724d..b0e72e9e791481 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 409b400f7f87ff..c41d4172f19909 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 457b137c80457f..d07fe9ac0ea728 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 d68d6e57e2ed56..35589c96e4b77d 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 1adf1b4630b870..a44e96e1d4bdec 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 9beb3d282a27cc..68fdfb5b8475d2 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
@@ -15,6 +15,7 @@
#include <cassert>
#include <type_traits>
+#include "test_range.h"
#include "types.h"
struct MoveOnlyOuter : SimpleForwardCommonOuter<ForwardCommonInner> {
@@ -32,11 +33,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 6bfa0ab487ba1b..7bb7e95b02dabb 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 5e0a0a3ce3fbc4..26c9ac08d338bd 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 85d13ac5c29dfb..34c0f15ce34630 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 8796f9df63ceed..c224d198d16bb8 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
@@ -16,6 +16,7 @@
#include <type_traits>
#include <utility>
+#include "test_range.h"
#include "types.h"
struct Pred {
@@ -42,12 +43,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 bb5b5f5ff4909a..b30c4fbe3fd96e 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 59dd85bf28bc3f..91d6f2eab18b48 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
@@ -18,13 +18,9 @@
#include <utility>
#include "test_macros.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 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 6061f710a26363..c5eeb25bb59eba 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