Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

66 lines (52 sloc) 1.736 kb
#include <unittest/unittest.h>
#include <thrust/tuple.h>
#include <thrust/scan.h>
#include <thrust/transform.h>
using namespace unittest;
template <typename Tuple>
__host__ __device__
Tuple operator+(const Tuple &lhs, const Tuple &rhs)
{
using namespace thrust;
return make_tuple(get<0>(lhs) + get<0>(rhs),
get<1>(lhs) + get<1>(rhs));
}
struct MakeTupleFunctor
{
template<typename T1, typename T2>
__host__ __device__
thrust::tuple<T1,T2> operator()(T1 &lhs, T2 &rhs)
{
return thrust::make_tuple(lhs, rhs);
}
};
template <typename T>
struct TestTupleScan
{
void operator()(const size_t n)
{
using namespace thrust;
host_vector<T> h_t1 = unittest::random_integers<T>(n);
host_vector<T> h_t2 = unittest::random_integers<T>(n);
// initialize input
host_vector< tuple<T,T> > h_input(n);
transform(h_t1.begin(), h_t1.end(),
h_t2.begin(), h_input.begin(),
MakeTupleFunctor());
device_vector< tuple<T,T> > d_input = h_input;
// allocate output
tuple<T,T> zero(0,0);
host_vector < tuple<T,T> > h_output(n, zero);
device_vector< tuple<T,T> > d_output(n, zero);
// exclusive_scan
inclusive_scan(h_input.begin(), h_input.end(), h_output.begin());
inclusive_scan(d_input.begin(), d_input.end(), d_output.begin());
ASSERT_EQUAL_QUIET(h_output, d_output);
// exclusive_scan
tuple<T,T> init(13,17);
exclusive_scan(h_input.begin(), h_input.end(), h_output.begin(), init);
exclusive_scan(d_input.begin(), d_input.end(), d_output.begin(), init);
ASSERT_EQUAL_QUIET(h_output, d_output);
}
};
VariableUnitTest<TestTupleScan, IntegralTypes> TestTupleScanInstance;
Jump to Line
Something went wrong with that request. Please try again.