From cfb20f17bd17e1cd98ccd8a4517ff3e925cf731c Mon Sep 17 00:00:00 2001 From: Patrick Palka <ppalka@redhat.com> Date: Wed, 12 Mar 2025 16:09:42 -0400 Subject: libstdc++: Implement P3137R3 views::to_input for C++26 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit libstdc++-v3/ChangeLog: * include/bits/version.def (ranges_to_input): Define. * include/bits/version.h: Regenerate. * include/std/ranges (ranges::to_input_view): Define for C++26. (views::__detail::__can_to_input): Likewise. (views::_ToInput, views::to_input): Likewise. * testsuite/std/ranges/adaptors/to_input/1.cc: New test. Reviewed-by: Tomasz KamiĆski <tkaminsk@redhat.com> Reviewed-by: Jonathan Wakely <jwakely@redhat.com> --- .../testsuite/std/ranges/adaptors/to_input/1.cc | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc (limited to 'libstdc++-v3/testsuite/std/ranges') diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc new file mode 100644 index 0000000..cde368a --- /dev/null +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc @@ -0,0 +1,59 @@ +// { dg-do run { target c++26 } } + +#include <ranges> + +#if __cpp_lib_ranges_to_input != 202502L +# error "Feature-test macro __cpp_lib_ranges_to_input has wrong value in <ranges>" +#endif + +#include <algorithm> +#include <vector> +#include <testsuite_hooks.h> +#include <testsuite_iterators.h> + +namespace ranges = std::ranges; +namespace views = std::views; + +void +test01() +{ + std::vector<int> r{1,2,3}; + auto v = r | views::to_input; + using type = decltype(v); + static_assert( ranges::input_range<type> && !ranges::forward_range<type> ); + + VERIFY( ranges::equal(v.base(), r) ); + VERIFY( v.size() == r.size() ); + VERIFY( v.end() == r.end() ); + auto it = v.begin(); + VERIFY( it != r.end() ); + *it = 42; + ++it; + *it = 43; + it++; + ranges::iter_swap(v.begin(), it); + VERIFY( ranges::equal(r, (int[]){3,43,42}) ); + *it = ranges::iter_move(it); + VERIFY( it == r.begin() + 2 ); + VERIFY( r.end() - it == 1 ); + VERIFY( it - r.end() == -1 ); +} + +void +test02() +{ + int x[] = {1,2,3}; + __gnu_test::test_input_range<int> rx(x); + static_assert( !ranges::common_range<decltype(rx)> ); + auto v = rx | views::to_input; + static_assert( std::same_as<decltype(v), decltype(views::all(rx))> ); + static_assert( std::same_as<decltype(x | views::to_input), + decltype(x | views::to_input | views::to_input)> ); +} + +int +main() +{ + test01(); + test02(); +} -- cgit v1.1