CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
77 lines
2.7 KiB
C++
77 lines
2.7 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// UNSUPPORTED: c++03, c++11, c++14
|
|
|
|
// UNSUPPORTED: libcpp-has-no-incomplete-pstl
|
|
|
|
// <numeric>
|
|
|
|
// template<class ExecutionPolicy, class ForwardIterator>
|
|
// typename iterator_traits<ForwardIterator>::value_type
|
|
// reduce(ExecutionPolicy&& exec,
|
|
// ForwardIterator first, ForwardIterator last);
|
|
// template<class ExecutionPolicy, class ForwardIterator, class T, class BinaryOperation>
|
|
// T reduce(ExecutionPolicy&& exec,
|
|
// ForwardIterator first, ForwardIterator last, T init,
|
|
// BinaryOperation binary_op);
|
|
|
|
#include <cassert>
|
|
#include <iterator>
|
|
#include <numeric>
|
|
#include <vector>
|
|
|
|
#include "MoveOnly.h"
|
|
#include "test_execution_policies.h"
|
|
#include "test_iterators.h"
|
|
#include "test_macros.h"
|
|
#include "type_algorithms.h"
|
|
|
|
template <class Iter, class ValueT>
|
|
struct Test {
|
|
template <class Policy>
|
|
void operator()(Policy&& policy) {
|
|
for (const auto& pair : {std::pair{0, 34}, {1, 36}, {2, 39}, {100, 5184}, {350, 61809}}) {
|
|
auto [size, expected] = pair;
|
|
std::vector<int> a(size);
|
|
for (int i = 0; i != size; ++i)
|
|
a[i] = i;
|
|
|
|
{
|
|
decltype(auto) ret = std::reduce(
|
|
policy, Iter(std::data(a)), Iter(std::data(a) + std::size(a)), ValueT(34), [](ValueT i, ValueT j) {
|
|
return i + j + 2;
|
|
});
|
|
static_assert(std::is_same_v<decltype(ret), ValueT>);
|
|
assert(ret == ValueT(expected));
|
|
}
|
|
{
|
|
decltype(auto) ret = std::reduce(policy, Iter(std::data(a)), Iter(std::data(a) + std::size(a)), ValueT(34));
|
|
static_assert(std::is_same_v<decltype(ret), ValueT>);
|
|
assert(ret == expected - 2 * size);
|
|
}
|
|
{
|
|
decltype(auto) ret = std::reduce(policy, Iter(std::data(a)), Iter(std::data(a) + std::size(a)));
|
|
static_assert(std::is_same_v<decltype(ret), typename std::iterator_traits<Iter>::value_type>);
|
|
assert(ret == expected - 2 * size - 34);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
int main(int, char**) {
|
|
types::for_each(types::forward_iterator_list<int*>{}, types::apply_type_identity{[](auto v) {
|
|
using Iter = typename decltype(v)::type;
|
|
types::for_each(
|
|
types::type_list<int, MoveOnly>{},
|
|
TestIteratorWithPolicies<types::partial_instantiation<Test, Iter>::template apply>{});
|
|
}});
|
|
|
|
return 0;
|
|
}
|