aboutsummaryrefslogtreecommitdiff
path: root/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp')
-rw-r--r--libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp b/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
index 2fc2fa8..3f7c174 100644
--- a/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
+++ b/libcxx/test/std/ranges/range.utility/view.interface/view.interface.pass.cpp
@@ -39,6 +39,14 @@ struct InputRange : std::ranges::view_interface<InputRange> {
constexpr InputIter end() const { return InputIter(buff + 8); }
};
+struct SizedInputRange : std::ranges::view_interface<SizedInputRange> {
+ int buff[8] = {0, 1, 2, 3, 4, 5, 6, 7};
+ constexpr InputIter begin() const { return InputIter(buff); }
+ constexpr sentinel_wrapper<InputIter> end() const { return sentinel_wrapper(InputIter(buff + 8)); }
+ constexpr std::size_t size() const { return 8; }
+};
+static_assert(std::ranges::sized_range<SizedInputRange>);
+
struct NotSizedSentinel {
using value_type = int;
using difference_type = std::ptrdiff_t;
@@ -155,11 +163,24 @@ concept BoolOpInvocable = requires (T const& obj) { bool(obj); };
constexpr bool testEmpty() {
static_assert(!EmptyInvocable<InputRange>);
+ // LWG 3715: `view_interface::empty` is overconstrained
+ static_assert(EmptyInvocable<SizedInputRange>);
static_assert( EmptyInvocable<ForwardRange>);
static_assert(!BoolOpInvocable<InputRange>);
+ static_assert(BoolOpInvocable<SizedInputRange>);
static_assert( BoolOpInvocable<ForwardRange>);
+ SizedInputRange sizedInputRange;
+ assert(!sizedInputRange.empty());
+ assert(!static_cast<SizedInputRange const&>(sizedInputRange).empty());
+
+ assert(sizedInputRange);
+ assert(static_cast<SizedInputRange const&>(sizedInputRange));
+
+ assert(!std::ranges::empty(sizedInputRange));
+ assert(!std::ranges::empty(static_cast<SizedInputRange const&>(sizedInputRange)));
+
ForwardRange forwardRange;
assert(!forwardRange.empty());
assert(!static_cast<ForwardRange const&>(forwardRange).empty());