// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include #include BOOST_AUTO_TEST_SUITE(RefTensorHandleTests) using namespace armnn; BOOST_AUTO_TEST_CASE(AcquireAndRelease) { std::shared_ptr memoryManager = std::make_shared(); TensorInfo info({1,1,1,1}, DataType::Float32); RefTensorHandle handle(info, memoryManager); handle.Manage(); handle.Allocate(); memoryManager->Acquire(); { float *buffer = reinterpret_cast(handle.Map()); BOOST_CHECK(buffer != nullptr); // Yields a valid pointer buffer[0] = 2.5f; BOOST_CHECK(buffer[0] == 2.5f); // Memory is writable and readable } memoryManager->Release(); memoryManager->Acquire(); { float *buffer = reinterpret_cast(handle.Map()); BOOST_CHECK(buffer != nullptr); // Yields a valid pointer buffer[0] = 3.5f; BOOST_CHECK(buffer[0] == 3.5f); // Memory is writable and readable } memoryManager->Release(); } #if !defined(__ANDROID__) // Only run these tests on non Android platforms BOOST_AUTO_TEST_CASE(CheckSourceType) { std::shared_ptr memoryManager = std::make_shared(); TensorInfo info({1}, DataType::Float32); RefTensorHandle handle(info, memoryManager, static_cast(MemorySource::Malloc)); int* testPtr = new int(4); // Not supported BOOST_CHECK(!handle.Import(static_cast(testPtr), MemorySource::DmaBuf)); // Not supported BOOST_CHECK(!handle.Import(static_cast(testPtr), MemorySource::DmaBufProtected)); // Supported BOOST_CHECK(handle.Import(static_cast(testPtr), MemorySource::Malloc)); delete testPtr; } BOOST_AUTO_TEST_CASE(ReusePointer) { std::shared_ptr memoryManager = std::make_shared(); TensorInfo info({1}, DataType::Float32); RefTensorHandle handle(info, memoryManager, static_cast(MemorySource::Malloc)); int* testPtr = new int(4); handle.Import(static_cast(testPtr), MemorySource::Malloc); // Reusing previously Imported pointer BOOST_CHECK(handle.Import(static_cast(testPtr), MemorySource::Malloc)); delete testPtr; } BOOST_AUTO_TEST_CASE(MisalignedPointer) { std::shared_ptr memoryManager = std::make_shared(); TensorInfo info({2}, DataType::Float32); RefTensorHandle handle(info, memoryManager, static_cast(MemorySource::Malloc)); // Allocate a 2 int array int* testPtr = new int[2]; // Increment pointer by 1 byte void* misalignedPtr = static_cast(reinterpret_cast(testPtr) + 1); BOOST_CHECK(!handle.Import(misalignedPtr, MemorySource::Malloc)); delete[] testPtr; } #endif BOOST_AUTO_TEST_SUITE_END()