[libcxx-commits] [libcxx] 4f547ee - [libc++][test] Add const and reference tests for enable_view. NFC.

Joe Loser via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jan 21 16:47:47 PST 2022


Author: Joe Loser
Date: 2022-01-21T19:46:45-05:00
New Revision: 4f547ee8b8a7d3e298c6cd95e58dd8916883e2d5

URL: https://github.com/llvm/llvm-project/commit/4f547ee8b8a7d3e298c6cd95e58dd8916883e2d5
DIFF: https://github.com/llvm/llvm-project/commit/4f547ee8b8a7d3e298c6cd95e58dd8916883e2d5.diff

LOG: [libc++][test] Add const and reference tests for enable_view. NFC.

As discussed in https://reviews.llvm.org/D117714, there is missing test coverage
for the behavior of `enable_view` when given a const or reference qualified
type. Add such tests showing the current behavior.

Differential Revision: https://reviews.llvm.org/D117918

Added: 
    

Modified: 
    libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp b/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
index 19ea867f3773a..7a12ccfc51e7f 100644
--- a/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
+++ b/libcxx/test/std/ranges/range.req/range.view/enable_view.compile.pass.cpp
@@ -22,27 +22,84 @@
 // Doesn't derive from view_base
 struct Empty { };
 static_assert(!std::ranges::enable_view<Empty>);
+static_assert(!std::ranges::enable_view<Empty&>);
+static_assert(!std::ranges::enable_view<Empty&&>);
+static_assert(!std::ranges::enable_view<const Empty>);
+static_assert(!std::ranges::enable_view<const Empty&>);
+static_assert(!std::ranges::enable_view<const Empty&&>);
 
 // Derives from view_base, but privately
 struct PrivateViewBase : private std::ranges::view_base { };
 static_assert(!std::ranges::enable_view<PrivateViewBase>);
+static_assert(!std::ranges::enable_view<PrivateViewBase&>);
+static_assert(!std::ranges::enable_view<PrivateViewBase&&>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase&>);
+static_assert(!std::ranges::enable_view<const PrivateViewBase&&>);
 
 // Derives from view_base, but specializes enable_view to false
 struct EnableViewFalse : std::ranges::view_base { };
-namespace std::ranges { template <> constexpr bool enable_view<EnableViewFalse> = false; }
+template <> constexpr bool std::ranges::enable_view<EnableViewFalse> = false;
 static_assert(!std::ranges::enable_view<EnableViewFalse>);
-
+static_assert(!std::ranges::enable_view<EnableViewFalse&>);
+static_assert(!std::ranges::enable_view<EnableViewFalse&&>);
+static_assert(std::ranges::enable_view<const EnableViewFalse>);
+static_assert(!std::ranges::enable_view<const EnableViewFalse&>);
+static_assert(!std::ranges::enable_view<const EnableViewFalse&&>);
 
 // Derives from view_base
 struct PublicViewBase : std::ranges::view_base { };
 static_assert(std::ranges::enable_view<PublicViewBase>);
+static_assert(!std::ranges::enable_view<PublicViewBase&>);
+static_assert(!std::ranges::enable_view<PublicViewBase&&>);
+static_assert(std::ranges::enable_view<const PublicViewBase>);
+static_assert(!std::ranges::enable_view<const PublicViewBase&>);
+static_assert(!std::ranges::enable_view<const PublicViewBase&&>);
 
 // Does not derive from view_base, but specializes enable_view to true
 struct EnableViewTrue { };
-namespace std::ranges { template <> constexpr bool enable_view<EnableViewTrue> = true; }
+template <> constexpr bool std::ranges::enable_view<EnableViewTrue> = true;
 static_assert(std::ranges::enable_view<EnableViewTrue>);
-
+static_assert(!std::ranges::enable_view<EnableViewTrue&>);
+static_assert(!std::ranges::enable_view<EnableViewTrue&&>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue&>);
+static_assert(!std::ranges::enable_view<const EnableViewTrue&&>);
 
 // Make sure that enable_view is a bool, not some other contextually-convertible-to-bool type.
 ASSERT_SAME_TYPE(decltype(std::ranges::enable_view<Empty>), const bool);
 ASSERT_SAME_TYPE(decltype(std::ranges::enable_view<PublicViewBase>), const bool);
+
+struct V1 : std::ranges::view_interface<V1> {};
+static_assert(std::ranges::enable_view<V1>);
+static_assert(!std::ranges::enable_view<V1&>);
+static_assert(!std::ranges::enable_view<V1&&>);
+static_assert(std::ranges::enable_view<const V1>);
+static_assert(!std::ranges::enable_view<const V1&>);
+static_assert(!std::ranges::enable_view<const V1&&>);
+
+struct V2 : std::ranges::view_interface<V1>, std::ranges::view_interface<V2> {};
+static_assert(!std::ranges::enable_view<V2>);
+static_assert(!std::ranges::enable_view<V2&>);
+static_assert(!std::ranges::enable_view<V2&&>);
+static_assert(!std::ranges::enable_view<const V2>);
+static_assert(!std::ranges::enable_view<const V2&>);
+static_assert(!std::ranges::enable_view<const V2&&>);
+
+struct V3 : std::ranges::view_interface<V1> {};
+static_assert(std::ranges::enable_view<V3>);
+static_assert(!std::ranges::enable_view<V3&>);
+static_assert(!std::ranges::enable_view<V3&&>);
+static_assert(std::ranges::enable_view<const V3>);
+static_assert(!std::ranges::enable_view<const V3&>);
+static_assert(!std::ranges::enable_view<const V3&&>);
+
+struct PrivateInherit : private std::ranges::view_interface<PrivateInherit> {};
+static_assert(!std::ranges::enable_view<PrivateInherit>);
+
+// ADL-proof
+struct Incomplete;
+template<class T> struct Holder { T t; };
+static_assert(!std::ranges::enable_view<Holder<Incomplete>*>);
+
+static_assert(!std::ranges::enable_view<void>);


        


More information about the libcxx-commits mailing list