mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-12 00:59:38 +08:00
Functions: fileExists and loadDataToFile use IO functions from namespace IoFunctions Now tests that use these functions are mocked by default, but some still require access to real files and have been restored the ability to read files. They will be mocked in next PRs. Related-To: NEO-7006 Signed-off-by: Marcel Skierkowski <marcel.skierkowski@intel.com>
194 lines
4.9 KiB
C++
194 lines
4.9 KiB
C++
/*
|
|
* Copyright (C) 2018-2025 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#include "shared/source/helpers/file_io.h"
|
|
#include "shared/source/program/kernel_info.h"
|
|
#include "shared/test/common/helpers/test_files.h"
|
|
|
|
#include "opencl/source/context/context.h"
|
|
#include "opencl/test/unit_test/mocks/mock_program.h"
|
|
|
|
#include "cl_api_tests.h"
|
|
|
|
using namespace NEO;
|
|
|
|
using ClCreateKernelTests = ApiTests;
|
|
|
|
namespace ULT {
|
|
|
|
TEST_F(ClCreateKernelTests, GivenCorrectKernelInProgramWhenCreatingNewKernelThenKernelIsCreatedAndSuccessIsReturned) {
|
|
USE_REAL_FILE_SYSTEM();
|
|
cl_kernel kernel = nullptr;
|
|
cl_program pProgram = nullptr;
|
|
cl_int binaryStatus = CL_SUCCESS;
|
|
size_t binarySize = 0;
|
|
std::string testFile;
|
|
retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd16_", ".bin");
|
|
|
|
auto pBinary = loadDataFromFile(
|
|
testFile.c_str(),
|
|
binarySize);
|
|
|
|
ASSERT_NE(0u, binarySize);
|
|
ASSERT_NE(nullptr, pBinary);
|
|
const unsigned char *binaries[1] = {reinterpret_cast<const unsigned char *>(pBinary.get())};
|
|
pProgram = clCreateProgramWithBinary(
|
|
pContext,
|
|
1,
|
|
&testedClDevice,
|
|
&binarySize,
|
|
binaries,
|
|
&binaryStatus,
|
|
&retVal);
|
|
|
|
pBinary.reset();
|
|
|
|
EXPECT_NE(nullptr, pProgram);
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
retVal = clBuildProgram(
|
|
pProgram,
|
|
1,
|
|
&testedClDevice,
|
|
nullptr,
|
|
nullptr,
|
|
nullptr);
|
|
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
kernel = clCreateKernel(
|
|
pProgram,
|
|
"CopyBuffer",
|
|
&retVal);
|
|
|
|
EXPECT_NE(nullptr, kernel);
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
retVal = clReleaseKernel(kernel);
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
retVal = clReleaseProgram(pProgram);
|
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenInvalidKernelNameWhenCreatingNewKernelThenInvalidKernelNameErrorIsReturned) {
|
|
USE_REAL_FILE_SYSTEM();
|
|
cl_kernel kernel = nullptr;
|
|
cl_program pProgram = nullptr;
|
|
cl_int binaryStatus = CL_SUCCESS;
|
|
size_t binarySize = 0;
|
|
std::string testFile;
|
|
retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd16_", ".bin");
|
|
|
|
auto pBinary = loadDataFromFile(
|
|
testFile.c_str(),
|
|
binarySize);
|
|
|
|
ASSERT_NE(0u, binarySize);
|
|
ASSERT_NE(nullptr, pBinary);
|
|
|
|
const unsigned char *binaries[1] = {reinterpret_cast<const unsigned char *>(pBinary.get())};
|
|
pProgram = clCreateProgramWithBinary(
|
|
pContext,
|
|
1,
|
|
&testedClDevice,
|
|
&binarySize,
|
|
binaries,
|
|
&binaryStatus,
|
|
&retVal);
|
|
|
|
pBinary.reset();
|
|
|
|
EXPECT_NE(nullptr, pProgram);
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
retVal = clBuildProgram(
|
|
pProgram,
|
|
1,
|
|
&testedClDevice,
|
|
nullptr,
|
|
nullptr,
|
|
nullptr);
|
|
|
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
|
|
|
kernel = clCreateKernel(
|
|
pProgram,
|
|
"WrongName",
|
|
&retVal);
|
|
|
|
ASSERT_EQ(nullptr, kernel);
|
|
ASSERT_EQ(CL_INVALID_KERNEL_NAME, retVal);
|
|
|
|
retVal = clReleaseProgram(pProgram);
|
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenNullProgramWhenCreatingNewKernelThenInvalidProgramErrorIsReturned) {
|
|
cl_kernel kernel = nullptr;
|
|
kernel = clCreateKernel(
|
|
nullptr,
|
|
"CopyBuffer",
|
|
&retVal);
|
|
|
|
ASSERT_EQ(CL_INVALID_PROGRAM, retVal);
|
|
ASSERT_EQ(nullptr, kernel);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenNullKernelNameWhenCreatingNewKernelThenInvalidValueErrorIsReturned) {
|
|
cl_kernel kernel = nullptr;
|
|
KernelInfo *pKernelInfo = new KernelInfo();
|
|
|
|
std::unique_ptr<MockProgram> pMockProg = std::make_unique<MockProgram>(pContext, false, toClDeviceVector(*pDevice));
|
|
pMockProg->addKernelInfo(pKernelInfo, testedRootDeviceIndex);
|
|
|
|
kernel = clCreateKernel(
|
|
pMockProg.get(),
|
|
nullptr,
|
|
&retVal);
|
|
|
|
EXPECT_EQ(CL_INVALID_VALUE, retVal);
|
|
EXPECT_EQ(nullptr, kernel);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenInvalidProgramWhenCreatingNewKernelThenInvalidProgramErrorIsReturned) {
|
|
cl_kernel kernel = nullptr;
|
|
|
|
kernel = clCreateKernel(
|
|
reinterpret_cast<cl_program>(pContext),
|
|
"CopyBuffer",
|
|
&retVal);
|
|
|
|
ASSERT_EQ(CL_INVALID_PROGRAM, retVal);
|
|
ASSERT_EQ(nullptr, kernel);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenProgramWithBuildErrorWhenCreatingNewKernelThenInvalidProgramExecutableErrorIsReturned) {
|
|
cl_kernel kernel = nullptr;
|
|
std::unique_ptr<MockProgram> pMockProg = std::make_unique<MockProgram>(pContext, false, toClDeviceVector(*pDevice));
|
|
pMockProg->setBuildStatus(CL_BUILD_ERROR);
|
|
|
|
kernel = clCreateKernel(
|
|
pMockProg.get(),
|
|
"",
|
|
&retVal);
|
|
|
|
EXPECT_EQ(CL_INVALID_PROGRAM_EXECUTABLE, retVal);
|
|
EXPECT_EQ(nullptr, kernel);
|
|
}
|
|
|
|
TEST_F(ClCreateKernelTests, GivenNullPtrForReturnWhenCreatingNewKernelThenKernelIsCreated) {
|
|
cl_kernel kernel = nullptr;
|
|
kernel = clCreateKernel(
|
|
nullptr,
|
|
"CopyBuffer",
|
|
nullptr);
|
|
|
|
ASSERT_EQ(nullptr, kernel);
|
|
}
|
|
} // namespace ULT
|