[libcxx] r321847 - Fix nonstandard bits in transform_reduce_iter_iter_init_bop_uop.

Billy Robert O'Neal III via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 4 17:31:47 PST 2018


Author: bion
Date: Thu Jan  4 17:31:47 2018
New Revision: 321847

URL: http://llvm.org/viewvc/llvm-project?rev=321847&view=rev
Log:
Fix nonstandard bits in transform_reduce_iter_iter_init_bop_uop.

* _VSTD should be std.
* <utility> is needed for forward.
* unary_function is no longer standard (and unnecessary for this, a C++17-only test)

Modified:
    libcxx/trunk/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp

Modified: libcxx/trunk/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp?rev=321847&r1=321846&r2=321847&view=diff
==============================================================================
--- libcxx/trunk/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp (original)
+++ libcxx/trunk/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp Thu Jan  4 17:31:47 2018
@@ -18,40 +18,24 @@
 
 #include <numeric>
 #include <cassert>
+#include <utility>
 
 #include "test_iterators.h"
 
-template <class T = void>
-struct identity : std::unary_function<T, T>
-{
-    constexpr const T& operator()(const T& x) const { return x;}
-};
-
-template <>
-struct identity<void>
+struct identity
 {
     template <class T>
-    constexpr auto operator()(T&& x) const
-    _NOEXCEPT_(noexcept(_VSTD::forward<T>(x)))
-    -> decltype        (_VSTD::forward<T>(x))
-        { return        _VSTD::forward<T>(x); }
+    constexpr decltype(auto) operator()(T&& x) const {
+        return std::forward<T>(x);
+    }
 };
 
-
-template <class T = void>
 struct twice
 {
-    constexpr const T operator()(const T& x) const noexcept { return 2 * x; }
-};
-
-template <>
-struct twice<void>
-{
     template <class T>
-    constexpr auto operator()(const T& x) const
-    _NOEXCEPT_(noexcept(2 * x))
-    -> decltype        (2 * x)
-        { return        2 * x; }
+    constexpr auto operator()(const T& x) const {
+        return 2 * x;
+    }
 };
 
 template <class Iter1, class T, class BOp, class UOp>
@@ -70,23 +54,23 @@ test()
     int ia[]          = {1, 2, 3, 4, 5, 6};
     unsigned sa = sizeof(ia) / sizeof(ia[0]);
 
-    test(Iter(ia), Iter(ia),    0, std::plus<>(),       identity<>(),       0);
-    test(Iter(ia), Iter(ia),    1, std::multiplies<>(), identity<>(),       1);
-    test(Iter(ia), Iter(ia+1),  0, std::multiplies<>(), identity<>(),       0);
-    test(Iter(ia), Iter(ia+1),  2, std::plus<>(),       identity<>(),       3);
-    test(Iter(ia), Iter(ia+2),  0, std::plus<>(),       identity<>(),       3);
-    test(Iter(ia), Iter(ia+2),  3, std::multiplies<>(), identity<>(),       6);
-    test(Iter(ia), Iter(ia+sa), 4, std::multiplies<>(), identity<>(),    2880);
-    test(Iter(ia), Iter(ia+sa), 4, std::plus<>(),       identity<>(),      25);
-
-    test(Iter(ia), Iter(ia),    0, std::plus<>(),       twice<>(),       0);
-    test(Iter(ia), Iter(ia),    1, std::multiplies<>(), twice<>(),       1);
-    test(Iter(ia), Iter(ia+1),  0, std::multiplies<>(), twice<>(),       0);
-    test(Iter(ia), Iter(ia+1),  2, std::plus<>(),       twice<>(),       4);
-    test(Iter(ia), Iter(ia+2),  0, std::plus<>(),       twice<>(),       6);
-    test(Iter(ia), Iter(ia+2),  3, std::multiplies<>(), twice<>(),      24);
-    test(Iter(ia), Iter(ia+sa), 4, std::multiplies<>(), twice<>(),  184320); // 64 * 2880
-    test(Iter(ia), Iter(ia+sa), 4, std::plus<>(),       twice<>(),      46);
+    test(Iter(ia), Iter(ia),    0, std::plus<>(),       identity(),       0);
+    test(Iter(ia), Iter(ia),    1, std::multiplies<>(), identity(),       1);
+    test(Iter(ia), Iter(ia+1),  0, std::multiplies<>(), identity(),       0);
+    test(Iter(ia), Iter(ia+1),  2, std::plus<>(),       identity(),       3);
+    test(Iter(ia), Iter(ia+2),  0, std::plus<>(),       identity(),       3);
+    test(Iter(ia), Iter(ia+2),  3, std::multiplies<>(), identity(),       6);
+    test(Iter(ia), Iter(ia+sa), 4, std::multiplies<>(), identity(),    2880);
+    test(Iter(ia), Iter(ia+sa), 4, std::plus<>(),       identity(),      25);
+
+    test(Iter(ia), Iter(ia),    0, std::plus<>(),       twice(),       0);
+    test(Iter(ia), Iter(ia),    1, std::multiplies<>(), twice(),       1);
+    test(Iter(ia), Iter(ia+1),  0, std::multiplies<>(), twice(),       0);
+    test(Iter(ia), Iter(ia+1),  2, std::plus<>(),       twice(),       4);
+    test(Iter(ia), Iter(ia+2),  0, std::plus<>(),       twice(),       6);
+    test(Iter(ia), Iter(ia+2),  3, std::multiplies<>(), twice(),      24);
+    test(Iter(ia), Iter(ia+sa), 4, std::multiplies<>(), twice(),  184320); // 64 * 2880
+    test(Iter(ia), Iter(ia+sa), 4, std::plus<>(),       twice(),      46);
 }
 
 template <typename T, typename Init>
@@ -94,7 +78,7 @@ void test_return_type()
 {
     T *p = nullptr;
     static_assert( std::is_same_v<Init,
-         decltype(std::transform_reduce(p, p, Init{}, std::plus<>(), identity<>()))> );
+         decltype(std::transform_reduce(p, p, Init{}, std::plus<>(), identity()))> );
 }
 
 int main()
@@ -118,7 +102,7 @@ int main()
 //  Make sure the math is done using the correct type
     {
     auto v = {1, 2, 3, 4, 5, 6};
-    unsigned res = std::transform_reduce(v.begin(), v.end(), 1U, std::multiplies<>(), twice<>());
+    unsigned res = std::transform_reduce(v.begin(), v.end(), 1U, std::multiplies<>(), twice());
     assert(res == 46080);       // 6! * 64 will not fit into a char
     }
 }




More information about the cfe-commits mailing list