1PREAMBLE = \
2    """
3    #include <thrust/sort.h>
4    """
5
6INITIALIZE = \
7    """
8    const size_t InputSize = 1 << 24;
9    thrust::host_vector<$KeyType>   h_keys = unittest::random_integers<$KeyType>(InputSize);
10
11    // set upper bits to zero
12    for(size_t i = 0; i < InputSize; i++)
13        h_keys[i] >>= (32 - $KeyBits);
14
15    thrust::device_vector<$KeyType> d_keys = h_keys;
16    thrust::device_vector<$KeyType> d_keys_copy = d_keys;
17
18    // test sort
19    thrust::stable_sort(h_keys.begin(), h_keys.end());
20    thrust::stable_sort(d_keys.begin(), d_keys.end());
21
22    ASSERT_EQUAL(d_keys, h_keys);
23    """
24
25TIME = \
26    """
27    thrust::copy(d_keys_copy.begin(), d_keys_copy.end(), d_keys.begin());
28    thrust::stable_sort(d_keys.begin(), d_keys.end());
29    """
30
31FINALIZE = \
32    """
33    RECORD_TIME();
34    RECORD_SORTING_RATE(double(InputSize));
35    """
36
37
38KeyTypes = ['unsigned int']
39KeyBits = range(1, 33)
40
41TestVariables = [('KeyType', KeyTypes), ('KeyBits',KeyBits)]
42
43