// // Copyright © 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "ReverseV2TestImpl.hpp" #include #include #include #include #include #include #include #include #include namespace { template LayerTestResult ReverseV2TestImpl( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory, const std::vector& input, const std::vector& axis, const std::vector& outputExpected, const armnn::TensorInfo& inputInfo, const armnn::TensorInfo& axisInfo, const armnn::TensorInfo& outputInfo) { LayerTestResult result(outputInfo); std::vector outputActual(outputInfo.GetNumElements()); std::unique_ptr inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo); std::unique_ptr axisHandle = tensorHandleFactory.CreateTensorHandle(axisInfo); std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo); armnn::ReverseV2QueueDescriptor queueDescriptor; armnn::WorkloadInfo workloadInfo; AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get()); AddInputToWorkload(queueDescriptor, workloadInfo, axisInfo, axisHandle.get()); AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get()); // Don't execute if ReverseV2 is not supported, as an exception will be raised. const armnn::BackendId& backend = workloadFactory.GetBackendId(); std::string reasonIfUnsupported; armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend); result.m_Supported = handle.IsReverseV2Supported(inputInfo, axisInfo, outputInfo, reasonIfUnsupported); if (!result.m_Supported) { return result; } auto workload = workloadFactory.CreateWorkload(armnn::LayerType::ReverseV2, queueDescriptor, workloadInfo); inputHandle->Allocate(); axisHandle->Allocate(); outputHandle->Allocate(); if (input.data() != nullptr) { CopyDataToITensorHandle(inputHandle.get(), input.data()); } if (axis.data() != nullptr) { CopyDataToITensorHandle(axisHandle.get(), axis.data()); } workload->PostAllocationConfigure(); ExecuteWorkload(*workload, memoryManager); if (outputActual.data() != nullptr) { CopyDataFromITensorHandle(outputActual.data(), outputHandle.get()); } return LayerTestResult(outputActual, outputExpected, outputHandle->GetShape(), outputInfo.GetShape()); } } template LayerTestResult ReverseV2SimpleTestEmptyAxis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { // Simple test with no axes set so output is the same as input float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4 }, qScale, qOffset); std::vector axis = armnnUtils::QuantizedVector({1, 1}, qScale, qOffset); std::vector outputExpected = armnnUtils::QuantizedVector({ 1, 2, 3, 4 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTestEmptyTensor( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { // Simple test with empty input tensor float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({0}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({0}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({0}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({}, qScale, qOffset); std::vector axis = armnnUtils::QuantizedVector({}, qScale, qOffset); std::vector outputExpected = armnnUtils::QuantizedVector({}, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest1Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4 }, qScale, qOffset); std::vector axis = {0}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest2Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 2, 1, 4, 3 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2,2}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2,2}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4 }, qScale, qOffset); std::vector axis = {1,0}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest3Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4, 21, 22, 23, 24, 17, 18, 19, 20, 13, 14, 15, 16 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest3Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {0, 1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 21, 22, 23, 24, 17, 18, 19, 20, 13, 14, 15, 16, 9, 10, 11, 12, 5, 6, 7, 8, 1, 2, 3, 4 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest3Dim3Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 3, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {1, 0, 2}; std::vector outputExpected = armnnUtils::QuantizedVector({ 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest4Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {0}; std::vector outputExpected = armnnUtils::QuantizedVector({ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest4Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {0, 1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 19, 20, 21, 22, 23, 24, 13, 14, 15, 16, 17, 18, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest4Dim3Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({3}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {0, 1, 2}; std::vector outputExpected = armnnUtils::QuantizedVector({ 22, 23, 24, 19, 20, 21, 16, 17, 18, 13, 14, 15, 10, 11, 12, 7, 8, 9, 4, 5, 6, 1, 2, 3 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2SimpleTest4Dim4Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({4}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 2, 2, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 }, qScale, qOffset); std::vector axis = {0, 1, 2, 3}; std::vector outputExpected = armnnUtils::QuantizedVector({ 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2EvenRowOddColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 3, 2, 1, 6, 5, 4 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2EvenRowOddColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 3, 1}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 3, 1}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 3, 2, 1, 6, 5, 4 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2EvenRowEvenColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2EvenRowEvenColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2OddRowOddColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({3, 3}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({3, 3}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 3, 2, 1, 6, 5, 4, 9, 8, 7 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2OddRowOddColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({3, 3, 1}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({3, 3, 1}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 3, 2, 1, 6, 5, 4, 9, 8, 7 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2OddRowEvenColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({3, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({3, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5, 12, 11, 10, 9 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2OddRowEvenColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({3, 4, 1}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({3, 4, 1}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, qScale, qOffset); std::vector axis = {1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5, 12, 11, 10, 9 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2NegAxisTest2Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 4}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({1}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 4}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, }, qScale, qOffset); std::vector axis = {-1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult ReverseV2NegAxisTest3Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory) { float qScale = 1.0f; int32_t qOffset = 0; armnn::TensorInfo inputInfo({2, 4, 1}, ArmnnType, qScale, qOffset); armnn::TensorInfo axisInfo({2}, armnn::DataType::Signed32, qScale, qOffset); armnn::TensorInfo outputInfo({2, 4, 1}, ArmnnType, qScale, qOffset); std::vector input = armnnUtils::QuantizedVector({ 1, 2, 3, 4, 5, 6, 7, 8, }, qScale, qOffset); std::vector axis = {1, -1}; std::vector outputExpected = armnnUtils::QuantizedVector({ 4, 3, 2, 1, 8, 7, 6, 5 }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, memoryManager, tensorHandleFactory, input, axis, outputExpected, inputInfo, axisInfo, outputInfo); } template LayerTestResult, 2> ReverseV2SimpleTestEmptyAxis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTestEmptyTensor( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest1Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest3Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest3Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest3Dim3Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest4Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest4Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest4Dim3Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest4Dim4Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2EvenRowOddColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2EvenRowOddColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2EvenRowEvenColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2EvenRowEvenColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2OddRowOddColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2OddRowOddColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2OddRowEvenColTest2Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2OddRowEvenColTest3Dim( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2NegAxisTest2Dim1Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2NegAxisTest3Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory); template LayerTestResult, 2> ReverseV2SimpleTest2Dim2Axis( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::ITensorHandleFactory& tensorHandleFactory);