Device enqueue optional (#579)

* optional execution of device side enqueue

* make device enqueue test suite optional
diff --git a/test_conformance/device_execution/main.c b/test_conformance/device_execution/main.c
index 6039f12..bbcb9f0 100644
--- a/test_conformance/device_execution/main.c
+++ b/test_conformance/device_execution/main.c
@@ -28,8 +28,29 @@
 std::string gKernelName;
 int gWimpyMode = 0;
 
+test_status InitCL(cl_device_id device) {
+  auto version = get_device_cl_version(device);
+  if (version < Version(2, 0)) {
+    return TEST_SKIP;
+  }
+
+  int error;
+  cl_uint max_queues_size;
+  error = clGetDeviceInfo(device, CL_DEVICE_MAX_ON_DEVICE_QUEUES,
+                          sizeof(max_queues_size), &max_queues_size, NULL);
+  if (error != CL_SUCCESS) {
+    print_error(error, "Unable to get max queues on device");
+    return TEST_FAIL;
+  }
+
+  if ((max_queues_size == 0) && (version > Version(2,2))) {
+    return TEST_SKIP;
+  }
+
+  return TEST_PASS;
+}
+
 test_definition test_list[] = {
-#ifdef CL_VERSION_2_0
     ADD_TEST( device_info ),
     ADD_TEST( device_queue ),
     ADD_TEST( execute_block ),
@@ -41,7 +62,6 @@
     ADD_TEST( host_multi_queue ),
     ADD_TEST( enqueue_ndrange ),
     ADD_TEST( host_queue_order ),
-#endif
 };
 
 const int test_num = ARRAY_SIZE( test_list );
@@ -76,5 +96,5 @@
       }
     }
 
-    return runTestHarnessWithCheck(argc, argv, test_num, test_list, false, false, 0, NULL);
+    return runTestHarnessWithCheck(argc, argv, test_num, test_list, false, false, 0, InitCL);
 }