124 lines
3.9 KiB
C++
124 lines
3.9 KiB
C++
/*
|
|
* Copyright (C) 2017-2018 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
#include "cl_api_tests.h"
|
|
#include "runtime/context/context.h"
|
|
#include "runtime/helpers/file_io.h"
|
|
#include "unit_tests/helpers/test_files.h"
|
|
|
|
using namespace OCLRT;
|
|
|
|
typedef api_tests clCreateProgramWithBinaryTests;
|
|
typedef api_tests clCreateProgramWithILTests;
|
|
typedef api_tests clCreateProgramWithILKHRTests;
|
|
|
|
namespace ULT {
|
|
|
|
TEST_F(clCreateProgramWithBinaryTests, GivenCorrectParametersWhenCreatingProgramWithBinaryThenProgramIsCreatedAndSuccessIsReturned) {
|
|
cl_program pProgram = nullptr;
|
|
cl_int binaryStatus = CL_INVALID_VALUE;
|
|
void *pBinary = nullptr;
|
|
size_t binarySize = 0;
|
|
std::string testFile;
|
|
retrieveBinaryKernelFilename(testFile, "CopyBuffer_simd8_", ".bin");
|
|
|
|
ASSERT_EQ(true, fileExists(testFile));
|
|
|
|
binarySize = loadDataFromFile(
|
|
testFile.c_str(),
|
|
pBinary);
|
|
|
|
ASSERT_NE(0u, binarySize);
|
|
ASSERT_NE(nullptr, pBinary);
|
|
|
|
pProgram = clCreateProgramWithBinary(
|
|
pContext,
|
|
num_devices,
|
|
devices,
|
|
&binarySize,
|
|
(const unsigned char **)&pBinary,
|
|
&binaryStatus,
|
|
&retVal);
|
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
EXPECT_NE(nullptr, pProgram);
|
|
EXPECT_EQ(CL_SUCCESS, binaryStatus);
|
|
|
|
deleteDataReadFromFile(pBinary);
|
|
|
|
retVal = clReleaseProgram(pProgram);
|
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
|
|
pProgram = clCreateProgramWithBinary(
|
|
nullptr,
|
|
num_devices,
|
|
devices,
|
|
&binarySize,
|
|
(const unsigned char **)&pBinary,
|
|
&binaryStatus,
|
|
nullptr);
|
|
EXPECT_EQ(nullptr, pProgram);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILTests, GivenInvalidContextWhenCreatingProgramWithIlThenInvalidContextErrorIsReturned) {
|
|
const uint32_t spirv[16] = {0x03022307};
|
|
|
|
cl_int err = CL_SUCCESS;
|
|
cl_program prog = clCreateProgramWithIL(nullptr, spirv, sizeof(spirv), &err);
|
|
EXPECT_EQ(CL_INVALID_CONTEXT, err);
|
|
EXPECT_EQ(nullptr, prog);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILTests, GivenNullIlWhenCreatingProgramWithIlThenInvalidValueErrorIsReturned) {
|
|
cl_int err = CL_SUCCESS;
|
|
cl_program prog = clCreateProgramWithIL(pContext, nullptr, 0, &err);
|
|
EXPECT_EQ(CL_INVALID_VALUE, err);
|
|
EXPECT_EQ(nullptr, prog);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILTests, GivenIncorrectIlSizeWhenCreatingProgramWithIlThenInvalidBinaryErrorIsReturned) {
|
|
const uint32_t spirv[16] = {0x03022307};
|
|
|
|
cl_int err = CL_SUCCESS;
|
|
cl_program prog = clCreateProgramWithIL(pContext, spirv, 0, &err);
|
|
EXPECT_EQ(CL_INVALID_BINARY, err);
|
|
EXPECT_EQ(nullptr, prog);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILTests, GivenIncorrectIlWhenCreatingProgramWithIlThenInvalidBinaryErrorIsReturned) {
|
|
const uint32_t notSpirv[16] = {0xDEADBEEF};
|
|
|
|
cl_int err = CL_SUCCESS;
|
|
cl_program prog = clCreateProgramWithIL(pContext, notSpirv, sizeof(notSpirv), &err);
|
|
EXPECT_EQ(CL_INVALID_BINARY, err);
|
|
EXPECT_EQ(nullptr, prog);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILTests, GivenIncorrectIlAndNoErrorPointerWhenCreatingProgramWithIlThenInvalidBinaryErrorIsReturned) {
|
|
const uint32_t notSpirv[16] = {0xDEADBEEF};
|
|
|
|
cl_program prog = clCreateProgramWithIL(pContext, notSpirv, sizeof(notSpirv), nullptr);
|
|
EXPECT_EQ(nullptr, prog);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILKHRTests, GivenCorrectParametersWhenCreatingProgramWithIlkhrThenProgramIsCreatedAndSuccessIsReturned) {
|
|
const uint32_t spirv[16] = {0x03022307};
|
|
|
|
cl_int err = CL_INVALID_VALUE;
|
|
cl_program program = clCreateProgramWithILKHR(pContext, spirv, sizeof(spirv), &err);
|
|
EXPECT_EQ(CL_SUCCESS, err);
|
|
EXPECT_NE(nullptr, program);
|
|
|
|
retVal = clReleaseProgram(program);
|
|
EXPECT_EQ(CL_SUCCESS, retVal);
|
|
}
|
|
|
|
TEST_F(clCreateProgramWithILKHRTests, GivenNullIlWhenCreatingProgramWithIlkhrThenNullProgramIsReturned) {
|
|
cl_program program = clCreateProgramWithILKHR(pContext, nullptr, 0, nullptr);
|
|
EXPECT_EQ(nullptr, program);
|
|
}
|
|
} // namespace ULT
|