diff options
author | Kamil-Goras-Mobica <141216953+kamil-goras-mobica@users.noreply.github.com> | 2024-04-09 17:54:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-09 08:54:44 -0700 |
commit | d0300d176f6db348fcaa307d15e93d066e5c0b0d (patch) | |
tree | 2ebb30ad9630fa323e873fae470bf5f5cc84dd66 | |
parent | f2a30737b6814f45cdac5a37a358fe2539c9e873 (diff) | |
download | OpenCL-CTS-d0300d176f6db348fcaa307d15e93d066e5c0b0d.tar.gz |
Added negative tests for clGetCommandBufferInfoKHR (#1929)
* Added negative tests for clGetCommandBufferInfo
* Replaced param_value_size values from 0 to sizeof() - 1
4 files changed, 356 insertions, 1 deletions
diff --git a/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt b/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt index 8a4a116a..0159e2c2 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt +++ b/test_conformance/extensions/cl_khr_command_buffer/CMakeLists.txt @@ -16,6 +16,7 @@ set(${MODULE_NAME}_SOURCES command_buffer_test_barrier.cpp command_buffer_test_event_info.cpp command_buffer_finalize.cpp + negative_command_buffer_get_info.cpp ) set_gnulike_module_compile_flags("-Wno-sign-compare") diff --git a/test_conformance/extensions/cl_khr_command_buffer/main.cpp b/test_conformance/extensions/cl_khr_command_buffer/main.cpp index 4ecb0806..8f9cdace 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/main.cpp +++ b/test_conformance/extensions/cl_khr_command_buffer/main.cpp @@ -63,7 +63,14 @@ test_definition test_list[] = { ADD_TEST(event_info_context), ADD_TEST(event_info_reference_count), ADD_TEST(finalize_invalid), - ADD_TEST(finalize_empty) + ADD_TEST(finalize_empty), + ADD_TEST(negative_get_command_buffer_info_invalid_command_buffer), + ADD_TEST(negative_get_command_buffer_info_not_supported_param_name), + ADD_TEST(negative_get_command_buffer_info_queues), + ADD_TEST(negative_get_command_buffer_info_ref_count), + ADD_TEST(negative_get_command_buffer_info_state), + ADD_TEST(negative_get_command_buffer_info_prop_array), + ADD_TEST(negative_get_command_buffer_info_context), }; int main(int argc, const char *argv[]) diff --git a/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_get_info.cpp b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_get_info.cpp new file mode 100644 index 00000000..1932ef54 --- /dev/null +++ b/test_conformance/extensions/cl_khr_command_buffer/negative_command_buffer_get_info.cpp @@ -0,0 +1,322 @@ +// +// Copyright (c) 2024 The Khronos Group Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +#include "basic_command_buffer.h" +#include "procs.h" +#include <vector> + +//-------------------------------------------------------------------------- + +namespace { + +enum class CombufInfoTestMode +{ + CITM_PARAM_NAME = 0, + CITM_QUEUES, + CITM_REF_COUNT, + CITM_STATE, + CITM_PROP_ARRAY, + CITM_CONTEXT +}; + +// CL_INVALID_COMMAND_BUFFER_KHR if command_buffer is not a valid +// command-buffer. +struct GetCommandBufferInfoInvalidCommandBuffer : public BasicCommandBufferTest +{ + using BasicCommandBufferTest::BasicCommandBufferTest; + + cl_int Run() override + { + cl_int error = + clGetCommandBufferInfoKHR(nullptr, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, + sizeof(cl_uint), nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_COMMAND_BUFFER_KHR, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_COMMAND_BUFFER_KHR", + TEST_FAIL); + + return CL_SUCCESS; + } +}; + +// CL_INVALID_VALUE if param_name is not one of the supported values or if size +// in bytes specified by param_value_size is less than size of return type and +// param_value is not a NULL value. +template <CombufInfoTestMode test_mode> +struct GetCommandBufferInfo : public BasicCommandBufferTest +{ + GetCommandBufferInfo(cl_device_id device, cl_context context, + cl_command_queue queue) + : BasicCommandBufferTest(device, context, queue), number_of_queues(0), + number_of_properties(0) + {} + + cl_int Run() override + { + cl_int error = CL_SUCCESS; + switch (test_mode) + { + case CombufInfoTestMode::CITM_PARAM_NAME: + error = RunParamNameTest(); + test_error(error, "RunParamNameTest failed"); + break; + case CombufInfoTestMode::CITM_QUEUES: + error = RunQueuesInfoTest(); + test_error(error, "RunQueuesInfoTest failed"); + break; + case CombufInfoTestMode::CITM_REF_COUNT: + error = RunRefCountInfoTest(); + test_error(error, "RunRefCountInfoTest failed"); + break; + case CombufInfoTestMode::CITM_STATE: + error = RunStateInfoTest(); + test_error(error, "RunStateInfoTest failed"); + break; + case CombufInfoTestMode::CITM_PROP_ARRAY: + error = RunPropArrayInfoTest(); + test_error(error, "RunPropArrayInfoTest failed"); + break; + case CombufInfoTestMode::CITM_CONTEXT: + error = RunContextInfoTest(); + test_error(error, "RunContextInfoTest failed"); + break; + } + + return CL_SUCCESS; + } + + cl_int SetUp(int elements) override + { + cl_int error = BasicCommandBufferTest::SetUp(elements); + test_error(error, "BasicCommandBufferTest::SetUp failed"); + + error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, sizeof(cl_uint), + &number_of_queues, nullptr); + test_error(error, "Unable to query CL_COMMAND_BUFFER_NUM_QUEUES_KHR"); + + + size_t ret_value_size = 0; + error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR, 0, nullptr, + &ret_value_size); + test_error(error, + "Unable to query CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR"); + + number_of_properties = + ret_value_size / sizeof(cl_command_buffer_properties_khr); + + return CL_SUCCESS; + } + + cl_int RunParamNameTest() + { + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_FLAGS_KHR, sizeof(cl_uint), + nullptr, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + cl_uint ret_val = 0; + + error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_FLAGS_KHR, sizeof(ret_val) - 1, + &ret_val, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, + sizeof(ret_val) - 1, &ret_val, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + return TEST_PASS; + } + + cl_int RunQueuesInfoTest() + { + cl_uint num_queues = 0; + + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_NUM_QUEUES_KHR, + sizeof(num_queues) - 1, &num_queues, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + // cl_command_queue queues[number_of_queues]; + std::vector<cl_command_queue> queues; + queues.resize(number_of_queues); + + error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_QUEUES_KHR, + number_of_queues * sizeof(cl_command_queue) - 1, queues.data(), + nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + return TEST_PASS; + } + + cl_int RunRefCountInfoTest() + { + cl_uint ref_count = 0; + + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_REFERENCE_COUNT_KHR, + sizeof(ref_count) - 1, &ref_count, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + return TEST_PASS; + } + + cl_int RunStateInfoTest() + { + cl_uint state = 0; + + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_STATE_KHR, sizeof(state) - 1, + &state, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + return TEST_PASS; + } + + cl_int RunPropArrayInfoTest() + { + std::vector<cl_command_buffer_properties_khr> properties; + properties.resize(number_of_properties); + + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_PROPERTIES_ARRAY_KHR, + number_of_properties * sizeof(cl_command_buffer_properties_khr) - 1, + properties.data(), nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + return TEST_PASS; + } + + cl_int RunContextInfoTest() + { + cl_context context = nullptr; + + cl_int error = clGetCommandBufferInfoKHR( + command_buffer, CL_COMMAND_BUFFER_CONTEXT_KHR, sizeof(context) - 1, + &context, nullptr); + + test_failure_error_ret(error, CL_INVALID_VALUE, + "clGetCommandBufferInfoKHR should return " + "CL_INVALID_VALUE", + TEST_FAIL); + + return TEST_PASS; + } + + cl_uint number_of_queues; + cl_uint number_of_properties; +}; +}; + +int test_negative_get_command_buffer_info_invalid_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest<GetCommandBufferInfoInvalidCommandBuffer>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_not_supported_param_name( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest< + GetCommandBufferInfo<CombufInfoTestMode::CITM_PARAM_NAME>>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_queues(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest< + GetCommandBufferInfo<CombufInfoTestMode::CITM_QUEUES>>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_ref_count(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest< + GetCommandBufferInfo<CombufInfoTestMode::CITM_REF_COUNT>>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_state(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest<GetCommandBufferInfo<CombufInfoTestMode::CITM_STATE>>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_prop_array(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest< + GetCommandBufferInfo<CombufInfoTestMode::CITM_PROP_ARRAY>>( + device, context, queue, num_elements); +} + +int test_negative_get_command_buffer_info_context(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements) +{ + return MakeAndRunTest< + GetCommandBufferInfo<CombufInfoTestMode::CITM_CONTEXT>>( + device, context, queue, num_elements); +} diff --git a/test_conformance/extensions/cl_khr_command_buffer/procs.h b/test_conformance/extensions/cl_khr_command_buffer/procs.h index ce121cea..12d06d99 100644 --- a/test_conformance/extensions/cl_khr_command_buffer/procs.h +++ b/test_conformance/extensions/cl_khr_command_buffer/procs.h @@ -140,5 +140,30 @@ extern int test_finalize_invalid(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements); extern int test_finalize_empty(cl_device_id device, cl_context context, cl_command_queue queue, int num_elements); +// Command-buffer negative tests +extern int test_negative_get_command_buffer_info_invalid_command_buffer( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_not_supported_param_name( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_queues(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_ref_count( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_state(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_prop_array( + cl_device_id device, cl_context context, cl_command_queue queue, + int num_elements); +extern int test_negative_get_command_buffer_info_context(cl_device_id device, + cl_context context, + cl_command_queue queue, + int num_elements); #endif // CL_KHR_COMMAND_BUFFER_PROCS_H |