   
   ASSERT_EQUAL(h_data, d_data);
 }
+
+
+template<typename T>
+void TestRemoveIfDeviceSeq(const size_t n)
+{
+  TestRemoveIfDevice<T>(thrust::seq, n);
+}
 DECLARE_VARIABLE_UNITTEST(TestRemoveIfDeviceSeq);
 
 
 template<typename T>
-void TestRemoveIfStencilDeviceSeq(const size_t n)
+void TestRemoveIfDeviceDevice(const size_t n)
+{
+  TestRemoveIfDevice<T>(thrust::device, n);
+}
+DECLARE_VARIABLE_UNITTEST(TestRemoveIfDeviceDevice);
+
+
+template<typename T, typename ExecutionPolicy>
+void TestRemoveIfStencilDevice(ExecutionPolicy exec, const size_t n)
 {
   thrust::host_vector<T>   h_data = unittest::random_samples<T>(n);
   thrust::device_vector<T> d_data = h_data;

  
  ASSERT_EQUAL(h_result, d_result);
}
DECLARE_VARIABLE_UNITTEST(TestRemoveCopyIfStencilDeviceSeq);


  
  ASSERT_EQUAL(h_result, d_result);
}


template<typename T>
void TestRemoveCopyDeviceSeq(const size_t n)
{
  TestRemoveCopyDevice<T>(thrust::seq, n);
}
DECLARE_VARIABLE_UNITTEST(TestRemoveCopyDeviceSeq);


template<typename T>
void TestRemoveCopyDeviceDevice(const size_t n)
{
  TestRemoveCopyDevice<T>(thrust::device, n);
}
DECLARE_VARIABLE_UNITTEST(TestRemoveCopyDeviceDevice);


template<typename T, typename ExecutionPolicy>
void TestRemoveCopyIfDevice(ExecutionPolicy exec, const size_t n)
{
  thrust::host_vector<T>   h_data = unittest::random_samples<T>(n);
  thrust::device_vector<T> d_data = h_data;
