   cudaMemcpy(&a,d_a,sizeof(cusp::complex<ValueType>),cudaMemcpyDeviceToHost);
   std::complex<ValueType> b(a.real(),a.imag());
   a = test_complex_compilation_entry<ValueType>();
-  ASSERT_COMPLEX_ALMOST_EQUAL(a,b);
-  /* Test twice the unit circle */
+  // Don't check for equality between host and device code when the 
+  // hardware device does not support double precision 
+  if(is_same_type<ValueType,double>::result == false|| device_supports_double()){
+    ASSERT_COMPLEX_ALMOST_EQUAL(a,b);
+  }
+  // Test twice the unit circle 
   for(int i = 0;i < 32;i++){
     ValueType theta(ValueType(i*M_PI/8));
     compareWithStd<ValueType>(cusp::polar<ValueType>(ValueType(1),theta));
   }
 }
 
-#if __CUDA_ARCH__ < 130
-// Don't try to run the double precision tests if the compiled
-// architecture doesn't support it 
-template <>
-void test_complex_compilation<double>()
-{
-  compareWithStd<double>(cusp::complex<double>(1,1));
-}
-#endif
-DECLARE_NUMERIC_UNITTEST(test_complex_compilation);
-
-
+
+DECLARE_NUMERIC_UNITTEST(TestComplex);
+
+

  a /= b;
  return a;
}

template <typename ValueType>
__host__ __device__ cusp::complex<ValueType> test_complex_non_members(){

      s_b = std::complex<ValueType>(creal(g_b),cimag(g_b));
      ASSERT_COMPLEX_ALMOST_EQUAL(b,s_b);
    }
  }else if(is_same_type<ValueType,double>::result){
    __complex__ double g_a;
    __complex__ double g_b;
    g_a = s_a.real() + s_a.imag()*__I__;
