     ASSERT_EQUAL(h_result_vals, d_result_vals);
   }
 }
+
+
+template<typename T>
+void TestMergeByKeyDeviceSeq(const size_t n)
+{
+  TestMergeByKeyDevice<T>(thrust::seq, n);
+}
 DECLARE_VARIABLE_UNITTEST(TestMergeByKeyDeviceSeq);
 
+
+template<typename T>
+void TestMergeByKeyDeviceDevice(const size_t n)
+{
+  TestMergeByKeyDevice<T>(thrust::device, n);
+}
+DECLARE_VARIABLE_UNITTEST(TestMergeByKeyDeviceDevice);
+

    h_result_keys.erase(h_end.first, h_result_keys.end());
    h_result_vals.erase(h_end.second, h_result_vals.end());

    merge_by_key_kernel<<<1,1>>>(d_a_keys.begin(), d_a_keys.end(),
                                 d_b_keys.begin(), d_b_keys.end(),
                                 d_a_vals.begin(),
                                 d_b_vals.begin(),

#include <thrust/execution_policy.h>


template<typename ExecutionPolicy,
         typename Iterator1,
         typename Iterator2,
         typename Iterator3,
         typename Iterator4,
