Differential D116621 Diff 439539 libcxx/test/std/ranges/range.adaptors/range.zip/range.concept.compile.pass.cpp
Changeset View
Changeset View
Standalone View
Standalone View
libcxx/test/std/ranges/range.adaptors/range.zip/range.concept.compile.pass.cpp
Show First 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | void testConceptPair() { | ||||
} | } | ||||
} | } | ||||
void testConceptTuple() { | void testConceptTuple() { | ||||
int buffer1[2] = {1, 2}; | int buffer1[2] = {1, 2}; | ||||
int buffer2[3] = {1, 2, 3}; | int buffer2[3] = {1, 2, 3}; | ||||
int buffer3[4] = {1, 2, 3, 4}; | int buffer3[4] = {1, 2, 3, 4}; | ||||
// TODO: uncomment all the static_asserts once [tuple.tuple] section in P2321R2 is implemented | |||||
// This is because convertible_to<tuple<int&,int&,int&>&, tuple<int,int,int>> is false without | |||||
// the above implementation, thus the zip iterator does not model indirectly_readable | |||||
{ | { | ||||
std::ranges::zip_view v{ContiguousCommonView{buffer1}, ContiguousCommonView{buffer2}, | std::ranges::zip_view v{ContiguousCommonView{buffer1}, ContiguousCommonView{buffer2}, | ||||
ContiguousCommonView{buffer3}}; | ContiguousCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{ContiguousNonCommonView{buffer1}, ContiguousNonCommonView{buffer2}, | std::ranges::zip_view v{ContiguousNonCommonView{buffer1}, ContiguousNonCommonView{buffer2}, | ||||
ContiguousNonCommonView{buffer3}}; | ContiguousNonCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{ContiguousNonCommonSized{buffer1}, ContiguousNonCommonSized{buffer2}, | std::ranges::zip_view v{ContiguousNonCommonSized{buffer1}, ContiguousNonCommonSized{buffer2}, | ||||
ContiguousNonCommonSized{buffer3}}; | ContiguousNonCommonSized{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{SizedRandomAccessView{buffer1}, ContiguousCommonView{buffer2}, | std::ranges::zip_view v{SizedRandomAccessView{buffer1}, ContiguousCommonView{buffer2}, | ||||
ContiguousCommonView{buffer3}}; | ContiguousCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{SizedRandomAccessView{buffer1}, SizedRandomAccessView{buffer2}, | std::ranges::zip_view v{SizedRandomAccessView{buffer1}, SizedRandomAccessView{buffer2}, | ||||
SizedRandomAccessView{buffer3}}; | SizedRandomAccessView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{NonSizedRandomAccessView{buffer1}, NonSizedRandomAccessView{buffer2}, | std::ranges::zip_view v{NonSizedRandomAccessView{buffer1}, NonSizedRandomAccessView{buffer2}, | ||||
NonSizedRandomAccessView{buffer3}}; | NonSizedRandomAccessView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::random_access_range<View>); | static_assert(std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::contiguous_range<View>); | static_assert(!std::ranges::contiguous_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{BidiCommonView{buffer1}, SizedRandomAccessView{buffer2}, SizedRandomAccessView{buffer3}}; | std::ranges::zip_view v{BidiCommonView{buffer1}, SizedRandomAccessView{buffer2}, SizedRandomAccessView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::bidirectional_range<View>); | static_assert(std::ranges::bidirectional_range<View>); | ||||
static_assert(!std::ranges::random_access_range<View>); | static_assert(!std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{BidiCommonView{buffer1}, BidiCommonView{buffer2}, BidiCommonView{buffer3}}; | std::ranges::zip_view v{BidiCommonView{buffer1}, BidiCommonView{buffer2}, BidiCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::bidirectional_range<View>); | static_assert(std::ranges::bidirectional_range<View>); | ||||
static_assert(!std::ranges::random_access_range<View>); | static_assert(!std::ranges::random_access_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{BidiCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | std::ranges::zip_view v{BidiCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::forward_range<View>); | static_assert(std::ranges::forward_range<View>); | ||||
static_assert(!std::ranges::bidirectional_range<View>); | static_assert(!std::ranges::bidirectional_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{BidiNonCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | std::ranges::zip_view v{BidiNonCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::forward_range<View>); | static_assert(std::ranges::forward_range<View>); | ||||
static_assert(!std::ranges::bidirectional_range<View>); | static_assert(!std::ranges::bidirectional_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{ForwardSizedView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | std::ranges::zip_view v{ForwardSizedView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::forward_range<View>); | static_assert(std::ranges::forward_range<View>); | ||||
static_assert(!std::ranges::bidirectional_range<View>); | static_assert(!std::ranges::bidirectional_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{ForwardSizedNonCommon{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | std::ranges::zip_view v{ForwardSizedNonCommon{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::forward_range<View>); | static_assert(std::ranges::forward_range<View>); | ||||
static_assert(!std::ranges::bidirectional_range<View>); | static_assert(!std::ranges::bidirectional_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(std::ranges::sized_range<View>); | static_assert(std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{InputCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | std::ranges::zip_view v{InputCommonView{buffer1}, ForwardSizedView{buffer2}, ForwardSizedView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::input_range<View>); | static_assert(std::ranges::input_range<View>); | ||||
static_assert(!std::ranges::forward_range<View>); | static_assert(!std::ranges::forward_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{InputCommonView{buffer1}, InputCommonView{buffer2}, InputCommonView{buffer3}}; | std::ranges::zip_view v{InputCommonView{buffer1}, InputCommonView{buffer2}, InputCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::input_range<View>); | static_assert(std::ranges::input_range<View>); | ||||
static_assert(!std::ranges::forward_range<View>); | static_assert(!std::ranges::forward_range<View>); | ||||
static_assert(std::ranges::common_range<View>); | static_assert(std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
{ | { | ||||
std::ranges::zip_view v{InputNonCommonView{buffer1}, InputCommonView{buffer2}, InputCommonView{buffer3}}; | std::ranges::zip_view v{InputNonCommonView{buffer1}, InputCommonView{buffer2}, InputCommonView{buffer3}}; | ||||
using View = decltype(v); | using View = decltype(v); | ||||
// static_assert(std::ranges::input_range<View>); | static_assert(std::ranges::input_range<View>); | ||||
static_assert(!std::ranges::forward_range<View>); | static_assert(!std::ranges::forward_range<View>); | ||||
static_assert(!std::ranges::common_range<View>); | static_assert(!std::ranges::common_range<View>); | ||||
static_assert(!std::ranges::sized_range<View>); | static_assert(!std::ranges::sized_range<View>); | ||||
} | } | ||||
} | } | ||||
using OutputIter = cpp17_output_iterator<int*>; | using OutputIter = cpp17_output_iterator<int*>; | ||||
static_assert(std::output_iterator<OutputIter, int>); | static_assert(std::output_iterator<OutputIter, int>); | ||||
Show All 17 Lines |