]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/compute/test/test_inplace_reduce.cpp
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
11 #define BOOST_TEST_MODULE TestInplaceReduce
12 #include <boost/test/unit_test.hpp>
16 #include <boost/compute/system.hpp>
17 #include <boost/compute/functional.hpp>
18 #include <boost/compute/algorithm/iota.hpp>
19 #include <boost/compute/algorithm/detail/inplace_reduce.hpp>
20 #include <boost/compute/container/vector.hpp>
23 #include "context_setup.hpp"
25 BOOST_AUTO_TEST_CASE(sum_int
)
27 if(is_apple_cpu_device(device
)) {
29 << "skipping all inplace_reduce tests due to Apple platform"
30 << " behavior when local memory is used on a CPU device"
35 int data
[] = { 1, 5, 3, 4, 9, 3, 5, 3 };
36 boost::compute::vector
<int> vector(data
, data
+ 8, queue
);
38 boost::compute::detail::inplace_reduce(vector
.begin(),
40 boost::compute::plus
<int>(),
43 BOOST_CHECK_EQUAL(int(vector
[0]), int(33));
45 vector
.assign(data
, data
+ 8);
47 boost::compute::detail::inplace_reduce(vector
.begin(),
49 boost::compute::plus
<int>(),
52 BOOST_CHECK_EQUAL(int(vector
[0]), int(36));
55 BOOST_AUTO_TEST_CASE(multiply_int
)
57 if(is_apple_cpu_device(device
)) {
61 int data
[] = { 1, 5, 3, 4, 9, 3, 5, 3 };
62 boost::compute::vector
<int> vector(data
, data
+ 8, queue
);
64 boost::compute::detail::inplace_reduce(vector
.begin(),
66 boost::compute::multiplies
<int>(),
69 BOOST_CHECK_EQUAL(int(vector
[0]), int(24300));
71 vector
.assign(data
, data
+ 8);
73 boost::compute::detail::inplace_reduce(vector
.begin(),
75 boost::compute::multiplies
<int>(),
78 BOOST_CHECK_EQUAL(int(vector
[0]), int(72900));
81 BOOST_AUTO_TEST_CASE(reduce_iota
)
83 if(is_apple_cpu_device(device
)) {
88 boost::compute::vector
<int> vector(1, context
);
89 boost::compute::iota(vector
.begin(), vector
.end(), int(0), queue
);
90 boost::compute::detail::inplace_reduce(vector
.begin(),
92 boost::compute::plus
<int>(),
95 BOOST_CHECK_EQUAL(int(vector
[0]), int(0));
99 boost::compute::iota(vector
.begin(), vector
.end(), int(0), queue
);
100 boost::compute::detail::inplace_reduce(vector
.begin(),
102 boost::compute::plus
<int>(),
105 BOOST_CHECK_EQUAL(int(vector
[0]), int(499500));
109 boost::compute::iota(vector
.begin(), vector
.end(), int(0), queue
);
110 boost::compute::detail::inplace_reduce(vector
.begin(),
112 boost::compute::plus
<int>(),
115 BOOST_CHECK_EQUAL(int(vector
[0]), int(3121251));
119 boost::compute::iota(vector
.begin(), vector
.end(), int(0), queue
);
120 boost::compute::detail::inplace_reduce(vector
.begin(),
122 boost::compute::plus
<int>(),
125 BOOST_CHECK_EQUAL(int(vector
[0]), int(8386560));
129 boost::compute::iota(vector
.begin(), vector
.end(), int(0), queue
);
130 boost::compute::detail::inplace_reduce(vector
.begin(),
132 boost::compute::plus
<int>(),
135 BOOST_CHECK_EQUAL(int(vector
[0]), int(12497500));
138 BOOST_AUTO_TEST_SUITE_END()