112 lines · cpp
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-exception6//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, SuccessSamePtr) {45 ol_symbol_handle_t KernelA = nullptr;46 ol_symbol_handle_t KernelB = nullptr;47 ASSERT_SUCCESS(olGetSymbol(Program, "foo", OL_SYMBOL_KIND_KERNEL, &KernelA));48 ASSERT_SUCCESS(olGetSymbol(Program, "foo", OL_SYMBOL_KIND_KERNEL, &KernelB));49 ASSERT_EQ(KernelA, KernelB);50}51 52TEST_P(olGetSymbolKernelTest, InvalidNullProgram) {53 ol_symbol_handle_t Kernel = nullptr;54 ASSERT_ERROR(OL_ERRC_INVALID_NULL_HANDLE,55 olGetSymbol(nullptr, "foo", OL_SYMBOL_KIND_KERNEL, &Kernel));56}57 58TEST_P(olGetSymbolKernelTest, InvalidNullKernelPointer) {59 ASSERT_ERROR(OL_ERRC_INVALID_NULL_POINTER,60 olGetSymbol(Program, "foo", OL_SYMBOL_KIND_KERNEL, nullptr));61}62 63TEST_P(olGetSymbolKernelTest, InvalidKernelName) {64 ol_symbol_handle_t Kernel = nullptr;65 ASSERT_ERROR(OL_ERRC_NOT_FOUND, olGetSymbol(Program, "invalid_kernel_name",66 OL_SYMBOL_KIND_KERNEL, &Kernel));67}68 69TEST_P(olGetSymbolKernelTest, InvalidKind) {70 ol_symbol_handle_t Kernel = nullptr;71 ASSERT_ERROR(72 OL_ERRC_INVALID_ENUMERATION,73 olGetSymbol(Program, "foo", OL_SYMBOL_KIND_FORCE_UINT32, &Kernel));74}75 76TEST_P(olGetSymbolGlobalTest, Success) {77 ol_symbol_handle_t Global = nullptr;78 ASSERT_SUCCESS(79 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));80 ASSERT_NE(Global, nullptr);81}82 83TEST_P(olGetSymbolGlobalTest, SuccessSamePtr) {84 ol_symbol_handle_t GlobalA = nullptr;85 ol_symbol_handle_t GlobalB = nullptr;86 ASSERT_SUCCESS(87 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &GlobalA));88 ASSERT_SUCCESS(89 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &GlobalB));90 ASSERT_EQ(GlobalA, GlobalB);91}92 93TEST_P(olGetSymbolGlobalTest, InvalidNullProgram) {94 ol_symbol_handle_t Global = nullptr;95 ASSERT_ERROR(96 OL_ERRC_INVALID_NULL_HANDLE,97 olGetSymbol(nullptr, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));98}99 100TEST_P(olGetSymbolGlobalTest, InvalidNullGlobalPointer) {101 ASSERT_ERROR(102 OL_ERRC_INVALID_NULL_POINTER,103 olGetSymbol(Program, "global", OL_SYMBOL_KIND_GLOBAL_VARIABLE, nullptr));104}105 106TEST_P(olGetSymbolGlobalTest, InvalidGlobalName) {107 ol_symbol_handle_t Global = nullptr;108 ASSERT_ERROR(OL_ERRC_NOT_FOUND,109 olGetSymbol(Program, "invalid_global",110 OL_SYMBOL_KIND_GLOBAL_VARIABLE, &Global));111}112