Spaces:
Runtime error
Runtime error
#include <unittest/unittest.h> | |
#include <thrust/set_operations.h> | |
#include <thrust/functional.h> | |
#include <thrust/sort.h> | |
template<typename Vector> | |
void TestSetIntersectionByKeyDescendingSimple(void) | |
{ | |
typedef typename Vector::value_type T; | |
typedef typename Vector::iterator Iterator; | |
Vector a_key(3), b_key(4); | |
Vector a_val(3), b_val(4); | |
a_key[0] = 4; a_key[1] = 2; a_key[2] = 0; | |
a_val[0] = 0; a_val[1] = 0; a_val[2] = 0; | |
b_key[0] = 4; b_key[1] = 3; b_key[2] = 3; b_key[3] = 0; | |
Vector ref_key(2), ref_val(2); | |
ref_key[0] = 4; ref_key[1] = 0; | |
ref_val[0] = 0; ref_val[1] = 0; | |
Vector result_key(2), result_val(2); | |
thrust::pair<Iterator,Iterator> end = | |
thrust::set_intersection_by_key(a_key.begin(), a_key.end(), | |
b_key.begin(), b_key.end(), | |
a_val.begin(), | |
result_key.begin(), | |
result_val.begin(), | |
thrust::greater<T>()); | |
ASSERT_EQUAL_QUIET(result_key.end(), end.first); | |
ASSERT_EQUAL_QUIET(result_val.end(), end.second); | |
ASSERT_EQUAL(ref_key, result_key); | |
ASSERT_EQUAL(ref_val, result_val); | |
} | |
DECLARE_VECTOR_UNITTEST(TestSetIntersectionByKeyDescendingSimple); | |
template<typename T> | |
void TestSetIntersectionByKeyDescending(const size_t n) | |
{ | |
thrust::host_vector<T> temp = unittest::random_integers<T>(2 * n); | |
thrust::host_vector<T> h_a_key(temp.begin(), temp.begin() + n); | |
thrust::host_vector<T> h_b_key(temp.begin() + n, temp.end()); | |
thrust::sort(h_a_key.begin(), h_a_key.end(), thrust::greater<T>()); | |
thrust::sort(h_b_key.begin(), h_b_key.end(), thrust::greater<T>()); | |
thrust::host_vector<T> h_a_val = unittest::random_integers<T>(h_a_key.size()); | |
thrust::device_vector<T> d_a_key = h_a_key; | |
thrust::device_vector<T> d_b_key = h_b_key; | |
thrust::device_vector<T> d_a_val = h_a_val; | |
thrust::host_vector<T> h_result_key(n), h_result_val(n); | |
thrust::device_vector<T> d_result_key(n), d_result_val(n); | |
thrust::pair< | |
typename thrust::host_vector<T>::iterator, | |
typename thrust::host_vector<T>::iterator | |
> h_end; | |
thrust::pair< | |
typename thrust::device_vector<T>::iterator, | |
typename thrust::device_vector<T>::iterator | |
> d_end; | |
h_end = thrust::set_intersection_by_key(h_a_key.begin(), h_a_key.end(), | |
h_b_key.begin(), h_b_key.end(), | |
h_a_val.begin(), | |
h_result_key.begin(), | |
h_result_val.begin(), | |
thrust::greater<T>()); | |
h_result_key.erase(h_end.first, h_result_key.end()); | |
h_result_val.erase(h_end.second, h_result_val.end()); | |
d_end = thrust::set_intersection_by_key(d_a_key.begin(), d_a_key.end(), | |
d_b_key.begin(), d_b_key.end(), | |
d_a_val.begin(), | |
d_result_key.begin(), | |
d_result_val.begin(), | |
thrust::greater<T>()); | |
d_result_key.erase(d_end.first, d_result_key.end()); | |
d_result_val.erase(d_end.second, d_result_val.end()); | |
ASSERT_EQUAL(h_result_key, d_result_key); | |
ASSERT_EQUAL(h_result_val, d_result_val); | |
} | |
DECLARE_VARIABLE_UNITTEST(TestSetIntersectionByKeyDescending); | |