   ASSERT_EQUAL(data[1], 20);
   ASSERT_EQUAL(data[2], 31);
 }
+
+
+void TestUniqueCopyDeviceSeq()
+{
+  TestUniqueCopyDevice(thrust::seq);
+}
 DECLARE_UNITTEST(TestUniqueCopyDeviceSeq);
 
+
+void TestUniqueCopyDeviceDevice()
+{
+  TestUniqueCopyDevice(thrust::device);
+}
+DECLARE_UNITTEST(TestUniqueCopyDeviceDevice);
+

};


void TestUniqueDeviceSeq()
{
  typedef thrust::device_vector<int> Vector;
  typedef Vector::value_type T;

#include <thrust/execution_policy.h>


template<typename ExecutionPolicy, typename Iterator1, typename Iterator2>
__global__
void unique_kernel(ExecutionPolicy exec, Iterator1 first, Iterator1 last, Iterator2 result)
{
  *result = thrust::unique(exec, first, last);
}


template<typename ExecutionPolicy, typename Iterator1, typename BinaryPredicate, typename Iterator2>
__global__
void unique_kernel(ExecutionPolicy exec, Iterator1 first, Iterator1 last, BinaryPredicate pred, Iterator2 result)
{
  *result = thrust::unique(exec, first, last, pred);
}


