From f4ea23d3a58ee23d13b719e525e0575a29e510da Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Wed, 14 Jun 2017 04:48:45 +0000 Subject: Implement the non-parallel versions of reduce and transform_reduce for C++17 llvm-svn: 305365 --- .../numeric.ops/reduce/reduce_iter_iter.pass.cpp | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 libcxx/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp (limited to 'libcxx/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp') diff --git a/libcxx/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp b/libcxx/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp new file mode 100644 index 00000000000..aa055e70d4f --- /dev/null +++ b/libcxx/test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp @@ -0,0 +1,63 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// +// UNSUPPORTED: c++98, c++03, c++11, c++14 + +// template +// typename iterator_traits::value_type +// reduce(InputIterator first, InputIterator last); + +#include +#include + +#include "test_iterators.h" + +template +void +test(Iter first, Iter last, T x) +{ + static_assert( std::is_same_v::value_type, + decltype(std::reduce(first, last))> ); + assert(std::reduce(first, last) == x); +} + +template +void +test() +{ + int ia[] = {1, 2, 3, 4, 5, 6}; + unsigned sa = sizeof(ia) / sizeof(ia[0]); + test(Iter(ia), Iter(ia), 0); + test(Iter(ia), Iter(ia+1), 1); + test(Iter(ia), Iter(ia+2), 3); + test(Iter(ia), Iter(ia+sa), 21); +} + +template +void test_return_type() +{ + T *p = nullptr; + static_assert( std::is_same_v ); +} + +int main() +{ + test_return_type(); + test_return_type(); + test_return_type(); + test_return_type(); + test_return_type(); + + test >(); + test >(); + test >(); + test >(); + test(); +} -- cgit v1.2.3