1//===------- Offload API tests - olGetSymbol ---------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "../common/Fixtures.hpp"
10#include <OffloadAPI.h>
11#include <gtest/gtest.h>
12
13using olGetSymbolKernelTest = OffloadProgramTest;
14OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE(olGetSymbolKernelTest);
15
16struct olGetSymbolGlobalTest : OffloadQueueTest {
17 void SetUp() override {
18 RETURN_ON_FATAL_FAILURE(OffloadQueueTest::SetUp());
19 ASSERT_TRUE(TestEnvironment::loadDeviceBinary("global", Device, DeviceBin));
20 ASSERT_GE(DeviceBin->getBufferSize(), 0lu);
21 ASSERT_SUCCESS(olCreateProgram(Device, DeviceBin->getBufferStart(),
22 DeviceBin->getBufferSize(), &Program));
23 }
24
25 void TearDown() override {
26 if (Program) {
27 olDestroyProgram(Program);
28 }
29 RETURN_ON_FATAL_FAILURE(OffloadQueueTest::TearDown());
30 }
31
32 std::unique_ptr<llvm::MemoryBuffer> DeviceBin;
33 ol_program_handle_t Program = nullptr;
34 ol_kernel_launch_size_args_t LaunchArgs{};
35};
36OFFLOAD_TESTS_INSTANTIATE_DEVICE_FIXTURE(olGetSymbolGlobalTest);
37
38TEST_P(olGetSymbolKernelTest, Success) {
39 ol_symbol_handle_t Kernel = nullptr;
40 ASSERT_SUCCESS(olGetSymbol(Program, "foo", OL_SYMBOL_KIND_KERNEL, &Kernel));
41 ASSERT_NE(Kernel, nullptr);
42}
43
44TEST_P(olGetSymbolKernelTest, InvalidNullProgram) {
45 ol_symbol_handle_t Kernel = nullptr;
46 ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,
47 olGetSymbol(nullptr, "foo", OL_SYMBOL_KIND_KERNEL, &Kernel));
48}
49
50TEST_P(olGetSymbolKernelTest, InvalidNullKernelPointer) {
51 ASSERT_ERROR(OL_ERRC_INVALID_NULL_POINTER,
52 olGetSymbol(Program, "foo", OL_SYMBOL_KIND_KERNEL, nullptr));
53}
54
55TEST_P(olGetSymbolKernelTest, InvalidKernelName) {
56 ol_symbol_handle_t Kernel = nullptr;
57 ASSERT_ERROR(OL_ERRC_NOT_FOUND, olGetSymbol(Program, "invalid_kernel_name",
58 OL_SYMBOL_KIND_KERNEL, &Kernel));
59}
60
61TEST_P(olGetSymbolKernelTest, InvalidKind) {
62 ol_symbol_handle_t Kernel = nullptr;
63 ASSERT_ERROR(
64 OL_ERRC_INVALID_ENUMERATION,
65 olGetSymbol(Program, "foo", OL_SYMBOL_KIND_FORCE_UINT32, &Kernel));
66}
67
68TEST_P(olGetSymbolGlobalTest, Success) {
69 ol_symbol_handle_t Global = nullptr;
70 ASSERT_SUCCESS(
71 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));
72 ASSERT_NE(Global, nullptr);
73}
74
75TEST_P(olGetSymbolGlobalTest, InvalidNullProgram) {
76 ol_symbol_handle_t Global = nullptr;
77 ASSERT_ERROR(
78 OL_ERRC_INVALID_NULL_HANDLE,
79 olGetSymbol(nullptr, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));
80}
81
82TEST_P(olGetSymbolGlobalTest, InvalidNullGlobalPointer) {
83 ASSERT_ERROR(
84 OL_ERRC_INVALID_NULL_POINTER,
85 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, nullptr));
86}
87
88TEST_P(olGetSymbolGlobalTest, InvalidGlobalName) {
89 ol_symbol_handle_t Global = nullptr;
90 ASSERT_ERROR(OL_ERRC_NOT_FOUND,
91 olGetSymbol(Program, "invalid_global",
92 OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));
93}
94

source code of offload/unittests/OffloadAPI/symbol/olGetSymbol.cpp