Spaces:
Runtime error
Runtime error
File size: 2,349 Bytes
be11144 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#include <unittest/unittest.h>
#include <thrust/functional.h>
#include <thrust/transform.h>
template<typename T>
struct saxpy_reference
{
__host__ __device__ saxpy_reference(const T &aa)
: a(aa)
{}
__host__ __device__ T operator()(const T &x, const T &y) const
{
return a * x + y;
}
T a;
};
template<typename Vector>
struct TestFunctionalPlaceholdersValue
{
void operator()(const size_t)
{
const size_t n = 10000;
typedef typename Vector::value_type T;
T a(13);
Vector x = unittest::random_integers<T>(n);
Vector y = unittest::random_integers<T>(n);
Vector result(n), reference(n);
thrust::transform(x.begin(), x.end(), y.begin(), reference.begin(), saxpy_reference<T>(a));
using namespace thrust::placeholders;
thrust::transform(x.begin(), x.end(), y.begin(), result.begin(), a * _1 + _2);
ASSERT_ALMOST_EQUAL(reference, result);
}
};
VectorUnitTest<TestFunctionalPlaceholdersValue, ThirtyTwoBitTypes, thrust::device_vector, thrust::device_allocator> TestFunctionalPlaceholdersValueDevice;
VectorUnitTest<TestFunctionalPlaceholdersValue, ThirtyTwoBitTypes, thrust::host_vector, std::allocator> TestFunctionalPlaceholdersValueHost;
template<typename Vector>
struct TestFunctionalPlaceholdersTransformIterator
{
void operator()(const size_t)
{
const size_t n = 10000;
typedef typename Vector::value_type T;
T a(13);
Vector x = unittest::random_integers<T>(n);
Vector y = unittest::random_integers<T>(n);
Vector result(n), reference(n);
thrust::transform(x.begin(), x.end(), y.begin(), reference.begin(), saxpy_reference<T>(a));
using namespace thrust::placeholders;
thrust::transform(thrust::make_transform_iterator(x.begin(), a * _1),
thrust::make_transform_iterator(x.end(), a * _1),
y.begin(),
result.begin(),
_1 + _2);
ASSERT_ALMOST_EQUAL(reference, result);
}
};
VectorUnitTest<TestFunctionalPlaceholdersTransformIterator, ThirtyTwoBitTypes, thrust::device_vector, thrust::device_allocator> TestFunctionalPlaceholdersTransformIteratorInstanceDevice;
VectorUnitTest<TestFunctionalPlaceholdersTransformIterator, ThirtyTwoBitTypes, thrust::host_vector, std::allocator> TestFunctionalPlaceholdersTransformIteratorInstanceHost;
|