#include #include #include #include struct make_pair_functor { template __host__ __device__ thrust::pair operator()(const T1 &x, const T2 &y) { return thrust::make_pair(x,y); } // end operator()() }; // end make_pair_functor template struct TestPairStableSortByKey { void operator()(const size_t n) { typedef thrust::pair P; // host arrays thrust::host_vector h_p1 = unittest::random_integers(n); thrust::host_vector h_p2 = unittest::random_integers(n); thrust::host_vector

h_pairs(n); thrust::host_vector h_values(n); thrust::sequence(h_values.begin(), h_values.end()); // zip up pairs on the host thrust::transform(h_p1.begin(), h_p1.end(), h_p2.begin(), h_pairs.begin(), make_pair_functor()); // device arrays thrust::device_vector

d_pairs = h_pairs; thrust::device_vector d_values = h_values; // sort on the host thrust::stable_sort_by_key(h_pairs.begin(), h_pairs.end(), h_values.begin()); // sort on the device thrust::stable_sort_by_key(d_pairs.begin(), d_pairs.end(), d_values.begin()); ASSERT_EQUAL_QUIET(h_pairs, d_pairs); ASSERT_EQUAL(h_values, d_values); } }; VariableUnitTest > TestPairStableSortByKeyInstance;