summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/numerics
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/std/numerics')
-rw-r--r--libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp b/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp
index 4f8142afe84..b2c2d714563 100644
--- a/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp
+++ b/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp
@@ -17,7 +17,9 @@
#include <numeric>
#include <cassert>
+#include <iterator>
+#include "MoveOnly.h"
#include "test_iterators.h"
template <class Iter1, class Iter2, class T>
@@ -56,6 +58,24 @@ void test_return_type()
decltype(std::transform_reduce(p, p, p, Init{}))> );
}
+inline MoveOnly operator+(const MoveOnly& lhs, const MoveOnly& rhs)
+{
+ return MoveOnly{lhs.get() + rhs.get()};
+}
+
+inline MoveOnly operator*(const MoveOnly& lhs, const MoveOnly& rhs)
+{
+ return MoveOnly{lhs.get() * rhs.get()};
+}
+
+void test_move_only_types()
+{
+ MoveOnly ia[] = {{1}, {2}, {3}};
+ MoveOnly ib[] = {{1}, {2}, {3}};
+ assert(14 ==
+ std::transform_reduce(std::begin(ia), std::end(ia), std::begin(ib), MoveOnly{0}).get());
+}
+
int main()
{
test_return_type<char, int>();
@@ -92,4 +112,6 @@ int main()
test<const int*, unsigned int *>();
test< int*, const unsigned int *>();
test< int*, unsigned int *>();
+
+ test_move_only_types();
}
OpenPOWER on IntegriCloud