| #include <unittest/unittest.h> |
| #include <thrust/device_ptr.h> |
| #include <thrust/transform.h> |
| #include <thrust/reduce.h> |
| #include <thrust/scan.h> |
| #include <thrust/sort.h> |
| #include <thrust/system_error.h> |
|
|
| void TestNvccIndependenceTransform(void) |
| { |
| typedef int T; |
| const int n = 10; |
|
|
| thrust::host_vector<T> h_input = unittest::random_integers<T>(n); |
| thrust::device_vector<T> d_input = h_input; |
|
|
| thrust::host_vector<T> h_output(n); |
| thrust::device_vector<T> d_output(n); |
|
|
| thrust::transform(h_input.begin(), h_input.end(), h_output.begin(), thrust::negate<T>()); |
| thrust::transform(d_input.begin(), d_input.end(), d_output.begin(), thrust::negate<T>()); |
| |
| ASSERT_EQUAL(h_output, d_output); |
| } |
| DECLARE_UNITTEST(TestNvccIndependenceTransform); |
|
|
| void TestNvccIndependenceReduce(void) |
| { |
| typedef int T; |
| const int n = 10; |
|
|
| thrust::host_vector<T> h_data = unittest::random_integers<T>(n); |
| thrust::device_vector<T> d_data = h_data; |
|
|
| T init = 13; |
|
|
| T h_result = thrust::reduce(h_data.begin(), h_data.end(), init); |
| T d_result = thrust::reduce(d_data.begin(), d_data.end(), init); |
|
|
| ASSERT_ALMOST_EQUAL(h_result, d_result); |
| } |
| DECLARE_UNITTEST(TestNvccIndependenceReduce); |
|
|
| void TestNvccIndependenceExclusiveScan(void) |
| { |
| typedef int T; |
| const int n = 10; |
|
|
| thrust::host_vector<T> h_input = unittest::random_integers<T>(n); |
| thrust::device_vector<T> d_input = h_input; |
|
|
| thrust::host_vector<T> h_output(n); |
| thrust::device_vector<T> d_output(n); |
| |
| thrust::inclusive_scan(h_input.begin(), h_input.end(), h_output.begin()); |
| thrust::inclusive_scan(d_input.begin(), d_input.end(), d_output.begin()); |
| ASSERT_EQUAL(d_output, h_output); |
| } |
| DECLARE_UNITTEST(TestNvccIndependenceExclusiveScan); |
|
|
| void TestNvccIndependenceSort(void) |
| { |
| typedef int T; |
| const int n = 10; |
|
|
| thrust::host_vector<T> h_data = unittest::random_integers<T>(n); |
| thrust::device_vector<T> d_data = h_data; |
|
|
| thrust::sort(h_data.begin(), h_data.end(), thrust::less<T>()); |
| thrust::sort(d_data.begin(), d_data.end(), thrust::less<T>()); |
|
|
| ASSERT_EQUAL(h_data, d_data); |
| } |
| DECLARE_UNITTEST(TestNvccIndependenceSort); |
|
|
|
|