// Copyright © Advanced Micro Devices, Inc., or its affiliates. // SPDX-License-Identifier: MIT #include "descriptors/BackendDescriptor.hpp" #include "descriptors/EngineDescriptor.hpp" #include "descriptors/ScopedDescriptor.hpp" #include "mocks/MockDescriptor.hpp" #include #include using namespace ::testing; using namespace hipdnn_backend; TEST(TestBackendDescriptor, PackAndUnpackDescriptorWorks) { auto mockPtr = std::make_shared>(); const ScopedDescriptor packed(HipdnnBackendDescriptor::packDescriptor(mockPtr)); ASSERT_NE(packed.get(), nullptr); auto unpacked = HipdnnBackendDescriptor::unpackDescriptor>( packed.get(), HIPDNN_STATUS_INTERNAL_ERROR, "fail"); ASSERT_EQ(unpacked.get(), mockPtr.get()); ASSERT_EQ(unpacked->getType(), HIPDNN_BACKEND_ENGINE_DESCRIPTOR); } TEST(TestBackendDescriptor, AsDescriptorCastsCorrectly) { auto mockPtr = std::make_shared>(); const ScopedDescriptor packed(HipdnnBackendDescriptor::packDescriptor(mockPtr)); auto result = packed.get()->asDescriptor>(); ASSERT_EQ(result.get(), mockPtr.get()); } TEST(TestBackendDescriptor, UnpackDescriptorFromArrayWorks) { auto mockPtr = std::make_shared>(); ScopedDescriptor packed(HipdnnBackendDescriptor::packDescriptor(mockPtr)); auto* arrayOfElements = static_cast(&packed.descriptor); auto unpacked = HipdnnBackendDescriptor::unpackDescriptor>( arrayOfElements, HIPDNN_STATUS_INTERNAL_ERROR, "fail"); ASSERT_EQ(unpacked.get(), mockPtr.get()); } TEST(TestBackendDescriptor, PackDescriptorToArrayWorks) { auto mockPtr = std::make_shared>(); hipdnnBackendDescriptor_t desc = nullptr; auto* arrayOfElements = static_cast(&desc); HipdnnBackendDescriptor::packDescriptor(mockPtr, arrayOfElements); const ScopedDescriptor scoped(desc); ASSERT_NE(desc, nullptr); } TEST(TestBackendDescriptor, UnpackDescriptorThrowsOnNullDescriptor) { EXPECT_THROW( { HipdnnBackendDescriptor::unpackDescriptor>( static_cast(nullptr), HIPDNN_STATUS_INTERNAL_ERROR, "fail"); }, HipdnnException); } TEST(TestBackendDescriptor, UnpackDescriptorThrowsOnNullPrivateDescriptor) { const ScopedDescriptor packed(new HipdnnBackendDescriptor()); EXPECT_THROW( { HipdnnBackendDescriptor::unpackDescriptor>( packed.get(), HIPDNN_STATUS_INTERNAL_ERROR, "fail"); }, HipdnnException); } TEST(TestBackendDescriptor, UnpackDescriptorFromArrayThrowsOnNullArray) { EXPECT_THROW( { HipdnnBackendDescriptor::unpackDescriptor>( static_cast(nullptr), HIPDNN_STATUS_INTERNAL_ERROR, "fail"); }, HipdnnException); }