summaryrefslogtreecommitdiff
path: root/libstdc++-v3/testsuite/25_algorithms
diff options
context:
space:
mode:
authorPatrick Palka <ppalka@redhat.com>2021-08-02 15:30:15 -0400
committerPatrick Palka <ppalka@redhat.com>2021-08-02 15:30:15 -0400
commit14d8a5ae472ca5743016f37da2dd4770d83dea21 (patch)
treeb2f302b2cbf13dc9d6d116f9dc15da7bf6805548 /libstdc++-v3/testsuite/25_algorithms
parent4414057186b227edf5b5efa527732bfcdf39d575 (diff)
libstdc++: Add missing std::move to ranges::copy/move/reverse_copy [PR101599]
In passing, this also renames the template parameter _O2 to _Out2 in ranges::partition_copy and uglifies two of its function parameters, out_true and out_false. PR libstdc++/101599 libstdc++-v3/ChangeLog: * include/bits/ranges_algo.h (__reverse_copy_fn::operator()): Add missing std::move in return statement. (__partition_copy_fn::operator()): Rename templtae parameter _O2 to _Out2. Uglify function parameters out_true and out_false. * include/bits/ranges_algobase.h (__copy_or_move): Add missing std::move to recursive call that unwraps a __normal_iterator output iterator. * testsuite/25_algorithms/copy/constrained.cc (test06): New test. * testsuite/25_algorithms/move/constrained.cc (test05): New test.
Diffstat (limited to 'libstdc++-v3/testsuite/25_algorithms')
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc13
-rw-r--r--libstdc++-v3/testsuite/25_algorithms/move/constrained.cc13
2 files changed, 26 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc
index 77ecf99d5b1..a05948a49c6 100644
--- a/libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/copy/constrained.cc
@@ -26,6 +26,7 @@
using __gnu_test::test_container;
using __gnu_test::test_range;
using __gnu_test::input_iterator_wrapper;
+using __gnu_test::input_iterator_wrapper_nocopy;
using __gnu_test::output_iterator_wrapper;
using __gnu_test::forward_iterator_wrapper;
@@ -214,6 +215,17 @@ test05()
return ok;
}
+void
+test06()
+{
+ // PR libstdc++/101599
+ int x[] = {1,2,3};
+ test_range<int, input_iterator_wrapper_nocopy> rx(x);
+ std::vector<int> v(4, 0);
+ ranges::copy(rx, v.begin());
+ VERIFY( ranges::equal(v, (int[]){1,2,3,0}) );
+}
+
int
main()
{
@@ -222,4 +234,5 @@ main()
static_assert(test03());
test04();
static_assert(test05());
+ test06();
}
diff --git a/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc b/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
index 1cdfbdf23bc..2ce27b663a2 100644
--- a/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/move/constrained.cc
@@ -26,6 +26,7 @@
using __gnu_test::test_container;
using __gnu_test::test_range;
using __gnu_test::input_iterator_wrapper;
+using __gnu_test::input_iterator_wrapper_nocopy;
using __gnu_test::output_iterator_wrapper;
using __gnu_test::forward_iterator_wrapper;
@@ -193,6 +194,17 @@ test04()
VERIFY( ranges::count(y, 0, &X::moved) == 6 );
}
+void
+test05()
+{
+ // PR libstdc++/101599
+ int x[] = {1,2,3};
+ test_range<int, input_iterator_wrapper_nocopy> rx(x);
+ std::vector<int> v(4, 0);
+ ranges::move(rx, v.begin());
+ VERIFY( ranges::equal(v, (int[]){1,2,3,0}) );
+}
+
int
main()
{
@@ -200,4 +212,5 @@ main()
test02();
static_assert(test03());
test04();
+ test05();
}