aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/std/ranges
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2025-03-12 16:09:42 -0400
committerPatrick Palka <ppalka@redhat.com>2025-03-12 16:09:42 -0400
commitcfb20f17bd17e1cd98ccd8a4517ff3e925cf731c (patch)
tree779d963ea998a20748d7214e7bdbe0c87a2a4a6b /libstdc++-v3/testsuite/std/ranges
parent90e53ecdbfcc482ad3d0090658427de6d44a5d49 (diff)
downloadgcc-cfb20f17bd17e1cd98ccd8a4517ff3e925cf731c.zip
gcc-cfb20f17bd17e1cd98ccd8a4517ff3e925cf731c.tar.gz
gcc-cfb20f17bd17e1cd98ccd8a4517ff3e925cf731c.tar.bz2
libstdc++: Implement P3137R3 views::to_input for C++26
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>
Diffstat (limited to 'libstdc++-v3/testsuite/std/ranges')
-rw-r--r--libstdc++-v3/testsuite/std/ranges/adaptors/to_input/1.cc59
1 files changed, 59 insertions, 0 deletions
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();
+}