]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/compute/test/test_transform_iterator.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 TestTransformIterator
12 #include <boost/test/unit_test.hpp>
16 #include <boost/type_traits.hpp>
17 #include <boost/static_assert.hpp>
19 #include <boost/compute/types.hpp>
20 #include <boost/compute/functional.hpp>
21 #include <boost/compute/algorithm/copy.hpp>
22 #include <boost/compute/container/vector.hpp>
23 #include <boost/compute/iterator/buffer_iterator.hpp>
24 #include <boost/compute/iterator/transform_iterator.hpp>
26 #include "check_macros.hpp"
27 #include "context_setup.hpp"
29 BOOST_AUTO_TEST_CASE(value_type
)
31 using boost::compute::float4_
;
35 boost::compute::transform_iterator
<
36 boost::compute::buffer_iterator
<float>,
37 boost::compute::sqrt
<float>
44 boost::compute::transform_iterator
<
45 boost::compute::buffer_iterator
<float4_
>,
46 boost::compute::length
<float4_
>
53 BOOST_AUTO_TEST_CASE(base_type
)
57 boost::compute::transform_iterator
<
58 boost::compute::buffer_iterator
<int>, boost::compute::abs
<int>
60 boost::compute::buffer_iterator
<int>
65 BOOST_AUTO_TEST_CASE(copy
)
67 int data
[] = { 1, -2, 3, -4, 5 };
68 boost::compute::vector
<int> a(data
, data
+ 5, queue
);
70 boost::compute::vector
<int> b(5, context
);
72 boost::compute::make_transform_iterator(
74 boost::compute::abs
<int>()
76 boost::compute::make_transform_iterator(
78 boost::compute::abs
<int>()
83 CHECK_RANGE_EQUAL(int, 5, b
, (1, 2, 3, 4, 5));
86 BOOST_AUTO_TEST_CASE(copy_abs_doctest
)
88 int data
[] = { -1, -2, -3, -4 };
89 boost::compute::vector
<int> input(data
, data
+ 4, queue
);
90 boost::compute::vector
<int> output(4, context
);
93 // use abs() from boost.compute
94 using boost::compute::abs
;
96 // copy the absolute value for each element in input to output
98 boost::compute::make_transform_iterator(input
.begin(), abs
<int>()),
99 boost::compute::make_transform_iterator(input
.end(), abs
<int>()),
105 CHECK_RANGE_EQUAL(int, 4, output
, (1, 2, 3, 4));
108 BOOST_AUTO_TEST_SUITE_END()